1. 程式人生 > >kafka:與zookeeper的聯絡是什麼?

kafka:與zookeeper的聯絡是什麼?


我們先看一張圖,zookeeper的儲存結構圖:

這裡寫圖片描述


可以看到在zookeeper中儲存的資訊有broker,consumer等重要znode資訊。

可以感知到,每個kafka節點會在zookeeper中註冊該機器的配置資訊。

然後註冊完的kafka節點的topic資訊會存在topics目錄下面。


根據zookeeper目錄列表可以看到,zookeeper儲存了kafka叢集的所有資訊,那麼傳送和接收訊息是怎樣的流程呢?
     

 kafka的傳送與接收


傳送:kafka的傳送程式(程式碼)會指定broker服務地址,那麼訊息的傳送會直接傳送到broker提供的地址中。

如果地址是列表(指定了多個broker地址),那麼則隨機選擇一個可用的傳送。接收到訊息的kafka機器會向zookeeper查詢擁有該topic下partition決定權(leader)的機器,然後由該leader選擇機器儲存資料,最終儲存資料。
接收:

kafka的接收會指定zookeeper地址,那麼接收到消費任務的zookeeper將任務報告給該topic下partition的leader,由該leader指定follower完成資料的獲取並返回。

Zookeeper上的細節:

1. 每個broker啟動後會在zookeeper上註冊一個臨時的broker registry,包含broker的ip地址和埠號,所儲存的topics和partitions資訊。

2. 每個consumer啟動後會在zookeeper上註冊一個臨時的consumer registry:包含consumer所屬的consumer group以及訂閱的topics。

3. 每個consumer group關聯一個臨時的owner registry和一個持久的offset registry。

對於被訂閱的每個partition包含一個owner registry,內容為訂閱這個partition的consumer id。

同時包含一個offset registry,內容為上一次訂閱的offset。