Java面试题:请简述你对ZAB协议的理解

ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议,实现分布式数据一致性

所有客户端的请求都是写入到leader进程中,然后由Leader同步到其他节点称之为Follerwer,在集

群数据同步的过程中,如果出现Follower节点崩溃或者Leader进程崩溃时,都会通过Zab协议来保证数据一致性

ZAB协议包括两种基本的模式:崩溃恢复和消息广播。

信息广播

集群中所有的事务请求都由Leader节点来处理,其他服务器为Follower,Leader将客户端的事务请

求转换为事务 Proposal,并且将Proposal 分发给集群中其他所有的Follower。


完成广播之后,Leader等待Follwer 反馈,当有过半数的Follower 反馈信息后,Leader将再次向集

群内Follower广播Commit信息,Commit信息就是确认将之前的Proposal 提交。


Leader 节点的写入是一个两步操作,第一步是广播事务操作,第二步是广播提交操作,其中过半

数指的是反馈的节点数>=N/2+1,N是全部的Follower节点数量。

崩溃恢复
初始化集群,刚刚启动的时候


Leader 崩溃,因为故障宕机


Leader失去了半数的机器支持,与集群中超过一半的节点断连


此时开启新一轮Leader选举,选举产生的Leader会与过半的Follower进行同步,使数据一致,当与

过半的机器同步完成后,就退出恢复模式,然后进入消息广播模式


整个ZooKeeper集群的一致性保证就是在上面两个状态之前切换,当Leader服务正常时,就是正常

的消息广播模式;当Leader不可用时,则进入崩溃恢复模式,崩溃恢复阶段会进行数据同步,完成

以后,重新进入消息广播阶段。

我们还需要了解一个ZXid

Zxid是Zab协议的一个事务编号,Zxid是一个64位的数字,其中低32位是一个简单的单调递增计数

器,针对客户端每一个事务请求,计数器加1;而高32位则代表Leader周期年代的编号。


Leader 周期(epoch),可以理解为当前集群所处的年代或者周期,每当有一个新的Leader选举出现

时,就会从这个 Leader服务器上取出其本地日志中最大事务的Zxid,并从中读取epoch值,然后加

1,以此作为新的周期ID。高32位代表了每代Leader的唯一性,低32位则代表了每代Leader中事务的唯一性。

ZAB节点的三种状态

following:服从leader的命令

leading:负责协调事务

election/looking:节点处于选举状态 正在寻找leader

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值