kafka中對於zookeeper的理解和leader選舉過程


1. 首先zookeeper是什么

  zookeeper是一個開放源代碼的分布式應用程序協調服務,可以把它看成是整個集群的管理者,監視者。

2. zookeeper能做什么

  它可以實現諸如分布式應用配置管理、統一命名服務、狀態同步服務、集群管理等功能。

3. zookeeper服務與kafka集群的聯系

  

 

 

 

  這里首先說一下broker的概念:Kafka 集群包含一個或多個服務器,這種服務器被稱為 broker,每個broker服務器都要連接到zk服務。

  • 一個典型的kafka集群中包含若干個producer(生產者),若干broker(一般broker越多,集群吞吐率越高),若干consumer group(消費組),以及一個zookeeper服務。
  • kafka通過zookeeper管理集群配置,選舉leader,以及在消費組發生變化時進行rebalance。
  • producer使用push模式將消息發布到broker,consumer使用pull模式從broker訂閱並消費消息。

4. Leader選舉流程。

  選舉流程主要出現在以下兩種情況發生時:

  (1)服務器初始化啟動時;

  (2)服務器在運行期間leader出現故障。

  由於涉及到算法和流程較復雜,這里就以個人理解淺顯的描述以下選舉過程,如有不當的地方歡迎指正。

 

  當服務器在初始化時啟動:

  假設集群中共有3台機器,分別使用server1、server2、server3等來表示,按編號以此啟動起來。
  第一步:每個server發起一個投票,推薦自己作為leader服務器,投票內容為(Serverid,Zxid),分別表示服務器ID、數據ID(服務器中存放定的最大數據ID)。由於server1先啟動,它的投票為(1,0),然后進入Looking狀態;
  第二步:server2啟動,發起投票為(2,0),並與已啟動的server1交換結果,由於server2的編號2大於1,因此勝出,並告知server1。
  第三步:server1將自己的投票改為(2,0),並重新投票。而server繼續維持之前投票(2,0)。這個時候統計第二輪投票,server2以兩票勝出,同時判斷當前投票人數為2,已經超過3台服務器的50%,因此結果生效,server2當選為Leader,狀態變為LEADING;server1狀態變為FOLLOWING。
  第四部:此時server3啟動,發現Leader已經存在,則直接將自己的狀態調整為FOLLOWING。

  注意:如果集群中有5台機器,那么由於投票人數不足50%,則需要保持Looking狀態,繼續等待新的投票者加入,直到超過50%為止。

 

  

  當服務器在運行期間leader出現故障:  

  第一步:假設server2作為leader掛了之后,剩下所有機器都會將自己的狀態改為LOOKING,然后開始Leader選舉過程。
  第二步:server1發出投票為(1,233),server3發出投票為(3,222)。
  第三步:兩台機器互相接收來自別的服務器的投票,判斷投票的有效性(是否來自LOOKING狀態的服務器),然后進行將別人的投票與自己的投票進行PK,PK規則如下:1.優先檢查Zxid,Zxid較大的優先作為leader;2.如果Zxid相同,那么Serverid較大的勝出。對於當前情況來看,server1勝出。
  第四步:發起第二輪投票,server3將自己投票改為(1,233),server1保持不變(1,233),此時判斷投票人數超過半數,server1勝出,當選為新leader。server1狀態改為LEADING,server3狀態改為FOLLOWING。

 

參考文章:《zookeeper的leader選舉過程》

https://blog.csdn.net/virtil33/article/details/94343215


免責聲明!

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



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