zk进行数据一致性处理分为两个阶段:
(1)确认阶段:首先会与follow节点确认能否进行数据同步;
(2)同步数据阶段:如果可以进行数据同步则直接向follow节点发送数据;
那么如果在数据同步时,某节点发生宕机就会发生选举:
(1)首先会根据zxid大小进行投票,如果某节点的zxid都比其它节点更大则直接选举为leader;(zxid为数据同步后的一个版本号,数值越大同步的数据越多);
(2)如果zxid相同,还会去比较myid,myid更大的直接选举为leader,这个是在配置中手动配置好的(可以机器性能越好的配置更大的数值);
(3)如果有过半的节点已经选举出leader,则新加入的节点不会在参与选举;
所以zk中的ZAB原子广播,实际做了两件事儿,1选举leader,2数据同步。