在前面幾篇博客我們介紹過一種消息中間件——RabbitMQ,本篇博客我們介紹另外一個消息中間件——Kafka,Kafka是由LinkedIn開發的,使用Scala編寫,是一種分布式,基於發布/訂閱的消息系統,在介紹 kafka 之前,我們首先需要知道為什么會誕生 kafka 。
1、kafka的誕生
假設 A 公司有一個購物網站,隨着業務的擴大,網站的訪問量越來越大,為了維持網站的運營,部署系統的服務器也越來越多,A 公司的運維人員為了更好的維護系統,不得不經常查看日志,但是問題來了,業務規模的增大,日志也越來越多,總是到服務器上查看日志,總歸是不方便的,並且不光是運維人員,開發人員在解決問題時也需要查看日志,那么有沒有一個專門的平台來收集日志呢?然后大家都通過此平台查看日志,進而分析日志。於是便構建了一個日志分析平台。
①、日志分析平台
通過此平台,大家都能利用該平台收集到的日志進行相應的后續操作了。但是新的需求又來了,為了更好的提高用戶的體驗度,增加用戶對網站的黏性,需要收集用戶對頁面的瀏覽、搜索等行為,然后根據這些信息給用戶推送精准的商品信息,於是,便又構建了一個用戶行為跟蹤平台。
②、用戶行為跟蹤平台
以上只是兩個業務需求場景,后續如果還有新的業務需求,還會構建類似這樣的系統,當系統增多以后,會發現公司維護這些系統都得花費很大的精力,而且我們總結一下,類似這樣的系統,我們抽象一下,無非就是下圖的場景:
我們把各種模塊產生的數據都收集起來放到一個平台中,然后相應的人員去該平台獲取相應的數據即可,該平台可以用來收集通用類型的數據,規模可以隨着公司的業務增長而增長。
kafka 便是為了解決上述問題而設計的一款基於發布與訂閱的消息系統。
2、Kafka的體系架構
①、Kafka Broker : 一個獨立的kafka 服務器便是一個 Broker,多個 Broker 組成一個集群,Broker 接收來自生產者 Producer 的消息,為消費者 Consumer 提供服務。
②、Producer:消息生產者,向 Broker 提供消息。
③、Consumer:消息消費者,從 Broker 讀取消息。
④、Zookeeper:為集群分布式一致性提供服務,以及在早期kafka版本保存消息相關元數據。
后面會對這四個模塊進行詳細介紹,這里大家先了解一下。
3、Kafka的優勢
前面我們就介紹過一個消息隊列RabbitMQ,在這個家族中還有諸如 ActiveMQ,ZeroMQ,甚至Redis等,那么我們為什么要選擇 Kafka呢?
①、多個生產者
kafka可以無縫的支持多個生產者,也就是它適合從多個消息生產系統收集數據,比如同時從前端系統,后端系統,數據庫,服務器等收集數據,並以統一的格式對外提供數據,數據消費者根據訂閱的消息隊列獲取相應的數據。
②、多個消費者
除了支持多個生產者,kafka 也支持多個消費者,而且消費者之間互不影響,這與別的消息系統不同,別的消息系統消息一旦被一個消費者消費掉之后,別的消費者是無法在獲取的。
③、消息持久化
kafka 中的消息可以根據設置保存到磁盤中,消費者由於處理速度慢或者流量高峰等無法及時處理消息,那么持久化數據可以保證數據不會丟失,以備消費者接着讀取。
④、伸縮性
kafka 作為一個分布式消息系統,對在線集群做橫向擴展絲毫不影響整體系統的可用性。
⑤、高性能
上面的一些特性,使得 kafka 成為了一個高性能的發布與訂閱消息系統,通過橫向擴展消費者、生產者和 broker,kafka 可以輕松處理巨大流量的消息流,並且在處理大量數據的同時,還能保證亞秒級的消息延遲。
參考文檔:
官網中文翻譯:http://kafka.apachecn.org/
《Kafka 權威指南》