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