Kafka基本組成以及實現過程

簡介:Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由ScalaJava編寫。Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者規模的網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop一樣的日誌數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的並行加載機制來統一線上和離線的消息處理,也是爲了通過集羣來提供實時的消息。——百度百科。

一、拓撲結構

——圖片來源於網絡,因結構清晰,所以在此引用

二、基本組成部分以及實現流程

1、Broker:kafka集羣中包含一個或多個服務器,這種服務器被稱爲broker。

2、Topic:每條發佈到Kafka集羣的消息都有一個類別,這個類別被稱爲Topic。可以看成是消息的聚合,一個topic有多個分佈在節點上的partition組成。(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存於一個或多個broker上但用戶只需指定消息的Topic即可生產或消費數據而不必關心數據存於何處)。

3、Partition:Partition是物理上的概念,每個Topic包含一個或多個Partition,Kafka的分配單位是Partition。

        每一個生產者按照算法把消息發送給不同的partition,每一個partition新增消息都會分配一個offset,它是該消息在分區中的唯一標準,kafka通過offset維護消息順序,在同一分區中消息是有順序的。每一個partition只允許一個consumer消費,一個consumer可以消費多個partition。(消息消費的時候,首先要知道去哪消費,這就是路由,消費完之後,要記錄消費單哪,就是 Offset。)

4、Producer:生產者,負責把消息發佈到Broker上。Producer創建一條記錄,記錄中要指定對應的Topic和Partition、Key和Value;

Producer發佈消息流程:

①寫入流程圖

——圖片來源網絡。 

1.broker state :producer 先從 zookeeper 的 "/brokers/.../state" 節點找到該partition的leader(具體的leader選舉請參看其他文章)
2.write log :將消息寫入到本地log
3.ACK :消息應答機制(Message acknowledgment,具體原理請參看其他文章)

②寫入方式:

        Producer通過push將消息發佈到Broker,每條信息都append到Partition中,保證高效。

5、Consumer:消費者,向Kafka broker讀取消息的客戶端。

訂閱 Topic 是以一個消費組(consumer group)來訂閱的,一個消費組裏面可以有多個消費者。同一個消費組中的兩個消費者,不會同時消費一個 Partition。
換句話來說,就是一個 Partition,只能被消費組裏的一個消費者消費,但是可以同時被多個消費組消費。
因此,如果消費組內的消費者如果比 Partition 多的話,那麼就會有個別消費者一直空閒。

——圖片來自網絡。(https://blog.csdn.net/YChenFeng/article/details/74980531

 關於更詳盡的Kafka知識可以參考以下博文:

1、《震驚了,原來這纔是Kafka的“真面目”!》https://www.jianshu.com/p/d3e963ff8b70

2、《RabbitMQ消息應答------ack機制》https://blog.csdn.net/a491857321/article/details/50670238

3、《kafka原理深入研究——轉》https://www.cnblogs.com/xifenglou/p/7251112.html

4、《Zookeeper 在 Kafka 中的作用》https://www.jianshu.com/p/a036405f989c

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章