Kafka集群篇-Leader選舉


Kafka集群的Leader選舉

  • Kafka並沒有采用多數投票來選舉Leader

    原因:

      1)節點數據完整性不同,如果完整數據為1萬挑,如果不完整數據節點只有9000條數據,如果當選了Leader,數據就丟失了1000條,而導致數據不一致;

      2)大數據文本比較慢;

  • Kafka會動態維護一組Leader數據的副本(ISR)

    ISR的作用:

      1)保證所有副本數據的一致性;

      2)數據寫入的時候,告知所有的ISR都保存一份;

  • Kafka會在ISR中選擇一個速度比較快的設為Leader

    如何判斷一個Leader速度比較快?

      1)Controller:集群啟動的時候會在Zookeeper中去注冊一個controller,所有的ISR會去session文件中搶注為Leader;

    Controller的作用:

      1)管理所有的Broker,檢查Broker的健康狀態,節點剔除;

      2)針對已經損壞的Broker,檢查該Broker中有多少的Leader和Follwer;

      3)重新分配之類的事情;

 

 

 

特殊情況:ISR中副本全部宕機

  對於這種情況,Kafka會如何處理呢?

  • 對於這種情況,Kafka會進行 unclean leader選舉(臟選舉),對於臟選舉,提供了兩種解決思路

    1)等待,當其中一個ISR好了,就選擇為Leader;

    2)ISR以外的Follower中選舉,此情況是丟失數據 ,生產不允許

Leader選舉配置建議

  • 禁用 “unclean leader” 選舉
  • 手動指定最小ISR(當ISR小於指定數量的時候,消息發送失敗)

 

故障處理細節

  • LEO(Log End Offset)

  每個副本的最后一個offset

  • HW(High Watermark)

  保證消費者數據的一致性,消費者能見到的最大的offset,ISR隊列中最小的LEO(所有副本中的最小LEO)

  HW解決了兩個問題:

    1)消費一致性;

    2)存儲一致性(新的Leader從ISR中選舉出來之后,其他的follower會將各自的log文件 高於 HW的部分截掉,然后從新的Leader同步數據)

 

  缺點:

    只能保證副本之間的數據一致性,並不能保證數據不丟失或者不重復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM