kafka的leader選舉過程 再平衡

2021-10-21 12:09:47 字數 1768 閱讀 8800

afka在所有broker中選出乙個controller,所有partition的leader選舉都由controller決定。controller會將leader的改變直接通過rpc的方式(比zookeeper queue的方式更高效)通知需為此作出響應的broker。同時controller也負責增刪topic以及replica的重新分配。

當有broker fari over controller的處理過程如下:

1.controller在zookeeper註冊watch,一旦有broker宕機(這是用宕機代表任何讓系統認為其die的情景,包括但不限於機器斷電,網路不可用,gc導致的stop the world,程序crash等),其在zookeeper對應的znode會自動被刪除,zookeeper會fire controller註冊的watch,controller讀取最新的倖存的broker

2.controller決定set_p,該集合包含了宕機的所有broker上的所有partition

3.對set_p中的每乙個partition

3.1 從/brokers/topics/[topic]/partitions/[partition]/state讀取該partition當前的isr

3.2 決定該partition的新leader。如果當前isr中有至少乙個replica還倖存,則選擇其中乙個作為新leader,新的isr則包含當前isr中所有倖存的replica(選舉演算法的實現類似於微軟的pacifica)。否則選擇該partition中任意乙個倖存的replica作為新的leader以及isr(該場景下可能會有潛在的資料丟失)。如果該partition的所有replica都宕機了,則將新的leader設定為-1。

3.3 將新的leader,isr和新的leader_epoch及controller_epoch寫入/brokers/topics/[topic]/partitions/[partition]/state。注意,該操作只有其version在3.1至3.3的過程中無變化時才會執行,否則跳轉到3.1

直接通過rpc向set_p相關的broker傳送leaderandisrrequest命令。controller可以在乙個rpc操作中傳送多個命令從而提高效率。

再平衡

建election.json檔案

,,

]}

使用election.json檔案執行優先副本選舉

/opt/cloudera/parcels/kafka/lib/kafka/bin/kafka-preferred-replica-election.sh --zookeeper zk1:2181 --path-to-json-file election.json
再次檢視topic的partition分布情況,發現partition為2的分割槽leader已經調整成151為leader了。

/opt/cloudera/parcels/kafka/lib/kafka/bin/kafka-topics.sh --zookeeper zk1:2181 --topic topic_replica_test --describe

[一次因為kafka分割槽的leader不為優先副本導致的消費堆積問題的原因排查及問題解決方法(

kafka的leader選舉過程

zookeeper之leader選舉過程

關於leader選舉會分為兩個過程 1.啟動時leader的選舉 2.leader崩潰時的選舉 一在每個節點剛啟動的時候,狀態都是locking狀態,然後就會開始選舉的流程,因為leader選舉至少需要兩台伺服器,所以一般會選舉三颱組成伺服器集群。當第一台伺服器剛啟動的時候,它自己是無法進行和完成l...

副本的leader選舉

kafka提供了資料複製演算法保證,如果leader副本所在的broker節點宕機或者出現故障,或者分割槽的leader節點發生故障,這個時候怎麼處理呢?那麼,kafka必須要保證從follower副本中選擇乙個新的leader副本。那麼kafka是如何實現選舉的呢?要了解leader選舉,我們需要...

副本的leader選舉

kafka提供了資料複製演算法保證,如果leader副本所在的broker節點宕機或者出現故障,或者分割槽的leader節點發生故障,這個時候怎麼處理呢?那麼,kafka必須要保證從follower副本中選擇乙個新的leader副本。那麼kafka是如何實現選舉的呢?要了解leader選舉,我們需要...