如何運用zookepper進行kafka Leader Election?
主要有兩種方法:
(一)搶註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?