Zookeeper在Kafka中的應用

Kafka介紹

Kafka的介紹可參考:

Zookeeper在Kafka中的使用

從上面的介紹可以看出Kafka是一個分佈式的消息系統,分佈式主要體現在Producer,Broker,Consumer的分佈式,下面章節主要講解Zookeeper如何支持相關對象的分佈式特性

Broker註冊

Broker在zookeeper中保存爲一個臨時節點,節點的路徑是/brokers/ids/[brokerid],每個節點會保存對應broker的IP以及端口等信息.
Zookeeper在Kafka中的應用0
Topic註冊

在kafka中,一個topic會被分成多個區並被分到多個broker上,分區的信息以及broker的分佈情況都保存在zookeeper中,根節點路徑爲/brokers/topics,每個topic都會在topics下建立獨立的子節點,每個topic節點下都會包含分區以及broker的對應信息,例如下圖中的狀態
Zookeeper在Kafka中的應用1
生產者負載均衡

當Broker啓動時,會註冊該Broker的信息,以及可訂閱的topic信息。生產者通過註冊在Broker以及Topic上的watcher動態的感知Broker以及Topic的分區情況,從而將Topic的分區動態的分配到broker上.  

消費者

kafka有消費者分組的概念,每個分組中可以包含多個消費者,每條消息只會發給分組中的一個消費者,且每個分組之間是相互獨立互不影響的。

消費者與分區的對應關係

對於每個消費者分組,kafka都會爲其分配一個全局唯一的Group ID,分組內的所有消費者會共享該ID,kafka還會爲每個消費者分配一個consumer ID,通常採用hostname:uuid的形式。在kafka的設計中規定,對於topic的每個分區,最多隻能被一個消費者進行消費,也就是消費者與分區的關係是一對多的關係。消費者與分區的關係也被存儲在zookeeper中
節點的路勁爲 /consumers/[group_id]/owners/[topic]/[broker_id-partition_id],該節點的內容就是消費者的Consumer ID
例如下圖的狀態:
Zookeeper在Kafka中的應用2 
消費者負載均衡
消費者服務啓動時,會創建一個屬於消費者節點的臨時節點,節點的路徑爲 /consumers/[group_id]/ids/[consumer_id],該節點的內容是該消費者訂閱的Topic信息。
每個消費者會對/consumers/[group_id]/ids節點註冊Watcher監聽器,一旦消費者的數量增加或減少就會觸發消費者的負載均衡。
例如下圖的狀態:
Zookeeper在Kafka中的應用3 
消費者還會對/brokers/ids/[brokerid]節點進行監聽,如果發現服務器的Broker服務器列表發生變化,也會進行消費者的負載均衡

消費者的offset

在kafka的消費者API分爲兩種(1)High Level Api:由zookeeper維護消費者的offset (2) Low Level API,自己的代碼實現對offset的維護。由於自己維護offset往往比較複雜,所以多數情況下都是使用High Level的API
offset在zookeeper中的節點路徑爲/consumers/[group_id]/offsets/[topic]/[broker_id-part_id],該節點的值就是對應的offset


轉自http://www.itnose.net/detail/6318531.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章