1. 程式人生 > >如何運用zookepper進行kafka Leader Election?

如何運用zookepper進行kafka Leader Election?

註冊 bsp roo 可能 zookepper 監聽 election 如果 etc

主要有兩種方法:

(一)搶註Leader節點-----非公平模式

(二)先到先得,後者監聽前者-----公平模式

(一)搶註Leader節點-----非公平模式

1.創建Leader父節點,如/chroot,並將其設置為persist持久節點;

2.各客戶端通過在/chroot下創建Leader節點,例如/chroot/Leader,來競爭Leader,該節點被設置為ephemeral臨時節點;

3.若某客戶端創建Leader節點成功,則該客戶端成功競選為Leader;

4.若某客戶端創建Leader失敗,則競選Leader失敗,在/chroot/Leader節點上註冊exist的watch監聽,一旦該節點被刪除則獲得通知;

5.Leader客戶端可通過刪除Leader節點來放棄Leader;

6.如果Leader宕機,由於Leader節點被設置為ephemeral臨時節點,Leader節點會被自行刪除,而其他節點由於在Leader節點上註冊了watch,故可得到通知,參加下一輪的Leader競選,從而保證了客戶端以Leader角色工作;

(二)先到先得,後者監聽前者-----公平模式

1.創建Leader父節點,如/chroot,並將其設置為persist持久節點;

2. 各客戶端通過在/chroot下創建Leader節點,如/chroot/Leader,來競爭Leader,該節點被設置為ephemeral_sequential臨時順序節點;

3.客戶端通過getChildren方法獲得/chroot/下的所有子節點,如果其註冊的節點ID在所有的子節點ID中是最小的,則當前客戶端競選Leader成功;

4. 否則,在前面的一個節點上註冊watch 監聽,一旦前面的節點被刪除,則它得到通知,返回step3(但是,不能認為自己成為Leader節點,因為可能前面的節點只是宕機了)

5. Leader節點可以通過自行刪除自己創建的節點放棄Leader;

如何運用zookepper進行kafka Leader Election?