Kafka 詳解(一)------簡介
在前面幾篇部落格我們介紹過一種訊息中介軟體——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 可以輕鬆處理巨大流量的訊息流,並且在處理大量資料的同時,還能保證亞秒級的訊息延遲。
參考文件:
官網: ofollow,noindex">http://kafka.apache.org
官網中文翻譯: http://kafka.apachecn.org/
《Kafka 權威指南》