kafka leader選舉機制

一、概述

kafka中有多個broker,kafka會在所有broker中選出一個controller。controller負責管理整個集群中的分區和副本的狀態。Partition的Leader選舉也是由controller決定,controller會將Leader的改變直接通過RPC的方式通知需為此作出響應的Broker

二、Kafka集群的Leader選舉原理

Kafka的Leader選舉是通過在zookeeper上創建/controller臨時節點來實現leader選舉,通過先到先得得原則決定。

所有參與選舉的broker在該節點中寫入當前broker的信息 ,由於一個節點只能被一個客戶端創建成功,創建成功的broker即為leader(controller)。由於臨時節點如果客戶端和服務端斷開的話,臨時節點會被刪除。所有當leader和zookeeper失去連接時,臨時節點會刪除,而其他broker會監聽該節點的變化,當節點刪除時,其他broker會收到事件通知,重新發起leader選舉。

三、分區的leader選舉

Kafka會將每個topic分為多個消息分區(partition),這樣消息的處理也可以在多個服務器上並行,有利於提供消息處理效率。

同時為了確保高可用,每個分區都會有一定數量的副本(replica)。這樣如果有部分服務器不可用,副本所在的服務器就會接替上來,保證應用的持續性。為了提高處理效率,消息的讀寫都是在固定的一個副本上完成。這個副本就是所謂的Leader,而其他副本則是Follower,Follower會定期地到Leader上同步數據。

如果某個分區所在的服務器除了問題,kafka會從該分區的其他的副本Follower中選擇一個作為新的Leader,之後所有的讀寫就會轉移到這個新的Leader上。

Kafka會在Zookeeper上針對每個Topic維護一個稱為ISR(in-sync replica 已同步的副本)的集合,該集合中是一些分區的副本。只有當這些副本都跟Leader中的副本同步了之後,kafka才會認為消息已提交,並反饋給消息的生產者。如果某個分區的Leader不可用,Kafka就會從ISR集合中選擇一個副本作為新的Leader。

如果所有的ISR都不可用,有兩種方法可選

1)等待ISR集合中的副本復活,雖然可以保證一致性,但可能需要很長時間。

2)是選擇任何一個立即可用的副本,可能該副本導致數據不一致。


kafka leader選舉機制



分享到:


相關文章: