天天看點

Kafka選舉機制原理(上)

1 大資料常用的選主機制

Leader選舉算法非常多,大資料領域常用的有以下兩種:

1.1 Zab(zookeeper使用)

Zab協定有四個階段

Leader election

Discovery (E#epoch establish)

Synchronization (5X#sync with followers)

Broadcast

比如3個節點選舉leader:編号為1、2、3。1先啟動,選擇自己為leader,然後2啟動

首先也選擇自己為leader,由于1,2都沒過半,選擇編号大的為leader,是以1、2都

選擇2為leader,然後3啟動發現1,2已經協商好且數量過半,于是3也選擇2為leader,leader選舉結束。

1.2 Raft

類似美國大選。

在Raft中,任何時候一個伺服器可以扮演下面角色之一:

Leader

處理所有用戶端互動,日志複制等,一般隻有一個Leader

Follower

類似選民,完全被動

Candidate候選人

可被選為一個新的上司人

啟動時在叢集中指定一些機器為Candidate,然後Candidate開始向其他機器(尤

其是Follower)拉票,當某個Candidate的票數超過半數,它就成為leader。

都是 paoxs 算法的變種。

由于Kafka叢集依賴zookeeper叢集,是以最簡單最直覺的方案是,所有Follower

都在ZooKeeper上設定一個Watch,一旦Leader當機,其對應的ephemeral

znode會自動删除,此時所有Follower都嘗試建立該節點,而建立成功者

(ZooKeeper保證隻有一個能建立成功)即是新的Leader,其它Replica即為

Follower。

2 常用選主機制的缺點

2.1 split-brain (腦裂)

這是由ZooKeeper的特性引起的,雖然ZooKeeper能保證所有Watch按順序觸發,但是網絡延遲,并不能保證同一時刻所有Replica“看”到的狀态是一樣的,這就可能造成不同Replica的響應不一緻,可能選出多個上司“大腦”,導緻“腦裂”。

繼續閱讀