zookeeper入門小記

1. zk主體框架

  • leader: 將接收的所有寫請求同步給所有follower,若超過半數(shù)同意則發(fā)送更改;
  • follower: 可處理讀請求,將收到的寫請求轉(zhuǎn)發(fā)給leader,若leader掛了則follower可以參與選舉,可處理所有讀請求;
  • observer: 可處理讀請求,亦將寫請求轉(zhuǎn)發(fā)給leader;
  • myid: 任何類型的node都有myid,是不能重復(fù)的;
  • maxid: 每個node都有maxid用于標(biāo)識節(jié)點(diǎn)中最后一個數(shù)據(jù)的編號(大多數(shù)情況下這個值是一致的);
  • zxid: 表示數(shù)據(jù)的更新程度,越大越新(類似maxid);
  • epoch: 紀(jì)元用于防止腦裂,看誰epoch大誰是最新一輪的選舉結(jié)果;
  • sid:類似myid,每臺zk的唯一標(biāo)識符

2. zk選舉機(jī)制

  • 首次啟動:假設(shè)共5臺服務(wù)器

    1. 第1臺啟動后,發(fā)起一次選舉,因?yàn)閱訑?shù)未到一半,故而無法完成選舉,node1保持looking狀態(tài);
    2. 第2臺啟動,再次發(fā)起選舉,此時node1 & node2分別投給自己,然后各自交換投票信息。node1發(fā)現(xiàn)node2的myid大于自己當(dāng)前投票的node,會將投票改成投給node2,現(xiàn)在node2共計(jì)2票,而node1獲得0票。但由于得票未超半數(shù),兩個node都保持looking狀態(tài);
    3. 第3臺啟動,重復(fù)上述操作,node3得到3票,成功當(dāng)選leader(leading狀態(tài)),且node1,2,3都不再為looking狀態(tài),變成follower的角色(following狀態(tài)),后續(xù)不再改他們的投票計(jì)劃;
    4. 第4臺啟動,由于1 2 3都支持node3,所以node4改票為支持node3,所以node4也變?yōu)閒ollower;
    5. 第5臺和4一樣,最終確認(rèn)3號成為leader。
  • 非第一次啟動進(jìn)行新選舉:

    1. 若cluster中原本的leader存在,有node企圖選舉則會被告知已有l(wèi)eader,讓該node與現(xiàn)leader建立連接同步狀態(tài)即可;
    2. 若cluster中l(wèi)eader掛掉,則先對比epoch,再對比zxid誰大(類似maxid,看誰的數(shù)據(jù)新),最后對比sid誰大(類似myid)

3. zk在分布式集群中的作用

  • 常見作用:分布式組件間的數(shù)據(jù)通信、集中式的元數(shù)據(jù)管理、服務(wù)發(fā)現(xiàn)/注冊中心、HA自動選主 & 分布式鎖

  • kafka中所用:

    1. 組件間數(shù)據(jù)通信,保持kafka不同節(jié)點(diǎn)間的通信(例如心跳);
    2. 元數(shù)據(jù)管理: isr元數(shù)據(jù)更新,確認(rèn)哪些kafka主題分區(qū)及時完成了數(shù)據(jù)同步;
    3. HA自動選主: kafka集群的controller選舉,通過zk的watcher機(jī)制,其他節(jié)點(diǎn)觀察controller的情況,隨時準(zhǔn)備搶占。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [TOC] 基礎(chǔ)概念 主題(Topic)與分區(qū)(Partition) Kafka中的消息以主題為單位進(jìn)行歸類,主題...
    東南枝下閱讀 426評論 0 0
  • 1、系統(tǒng)模型 1.1、數(shù)據(jù)模型 Zookeeper 的視圖結(jié)構(gòu)是一個樹形結(jié)構(gòu),樹上的每個節(jié)點(diǎn)稱之為數(shù)據(jù)節(jié)點(diǎn)(即 Z...
    OverCoding閱讀 737評論 0 3
  • 搭建zookeeper集群(一主兩從) zk啟動依賴java的JDK,所以要先安裝JDK 不會安裝JDK的可以看這...
    不給起這個名字閱讀 1,101評論 0 0
  • 在Zookeeper的官網(wǎng)上有這么一句話:ZooKeeper is a centralized service f...
    cyclone_29閱讀 808評論 0 0
  • ###kafka結(jié)構(gòu) 1.broker服務(wù): 一般情況下一臺主機(jī)就一個broker服,但也可以一臺主機(jī)有多個bro...
    后知不覺1閱讀 244評論 0 0

友情鏈接更多精彩內(nèi)容