Kafka集羣Leader選舉原理

Kafka集羣Leader選舉原理
我們知道Zookeeper集羣中也有選舉機制,是通過Paxos算法,通過不同節點向其他節點發送信息來投票選舉出leader,但是Kafka的leader的選舉就沒有這麼複雜了。
Kafka的Leader選舉是通過在zookeeper上創建/controller臨時節點來實現leader選舉,並在該節點中寫入當前broker的信息
{“version”:1,”brokerid”:1,”timestamp”:”1512018424988”}
利用Zookeeper的強一致性特性,一個節點只能被一個客戶端創建成功,創建成功的broker即爲leader,即先到先得原則,leader也就是集羣中的controller,負責集羣中所有大小事務。
當leader和zookeeper失去連接時,臨時節點會刪除,而其他broker會監聽該節點的變化,當節點刪除時,其他broker會收到事件通知,重新發起leader選舉。

KafkaController
KafkaController初始化ZookeeperLeaderElector對象,爲ZookeeperLeaderElector設置兩個回調方法,onControllerFailover和onControllerResignation
onControllerFailover在選舉leader成功後會回調,在onControllerFailover中進行leader依賴的模塊初始化,包括向zookeeper上/controller_epoch節點上記錄leader的選舉次數,這個epoch數值在處理分佈式腦裂的場景中很有用。
而onControllerResignation在當前broker不再成爲leader(即當前leader退位後)時會回調。
KafkaController在啓動後註冊zookeeper的會話超時監聽器,並嘗試選舉leader。

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