选举机制
zxid
zxid:事务编号(zookeeper transaction id),8字节的整型数字,但是zk把这个数字拆成了两部分,64位整数分为前32位和后32位。
初始化的时候zxid是0,即:
00000000000000000000000000000000 00000000000000000000000000000000
每一次写请求都会增加后32位,假设现在进行了10次写请求(即使没有修改到数据)zxid:
00000000000000000000000000000000 00000000000000000000000000001010
当进行一次选举的时候,前 32 位就会增加 1,并且清零后 32 位,此时zxid:
00000000000000000000000000000001 00000000000000000000000000000000
此外,当后32位彻底用完,即zk正常执行了 2^32-1 次写请求都没有进行过一次选举,则前32位加1,此时zxid:
# 进位前
00000000000000000000000000000000 11111111111111111111111111111111
# 进位后
00000000000000000000000000000001 00000000000000000000000000000000
总结:
- zxid事务编号的前32位官方命名为epoch,表示