网易二面:ZooKeeper的ZAB协议工作原理是什么?

B站影视 电影资讯 2025-09-25 04:28 4

摘要:ZAB(ZooKeeper Atomic Broadcast)是 Zookeeper专门设计的一种原子广播协议,用于保证数据一致性和故障恢复。它主要用于主从复制(Leader-Follower),并确保写请求(事务)严格有序,同时保证集群在发生Leader 失

文章内容收录到个人网站,方便阅读 :hardyfish.top/

ZAB(ZooKeeper Atomic Broadcast)是 Zookeeper 专门设计的一种原子广播协议 ,用于保证 数据一致性故障恢复 。它主要用于 主从复制(Leader-Follower) ,并确保 写请求(事务)严格有序 ,同时保证集群在发生 Leader 失效 时能正确恢复。

ZAB 主要由两个阶段组成:

崩溃恢复(Crash Recovery)阶段 :当 Leader 崩溃或网络分区时,集群需要选举一个新的 Leader 并同步数据,确保一致性。消息广播(Atomic Broadcast)阶段 :当集群稳定后,Leader 通过 ZAB 协议进行事务同步,确保所有 Follower 都接收到相同的事务。

如果 ZooKeeper 发现 Leader 宕机或发生了网络分区,它会进入 恢复模式 ,重新选举新的 Leader 并确保数据一致。

选举 Leader :使用 ZAB 选举算法 (基于 ZXID 最大值 )。拥有最大事务 ID(ZXID)的节点 优先成为 Leader。选举完成后,Leader 进入 "LOOKING" 状态,等待 Follower 连接。同步数据 :Follower 连接到新的 Leader, 检查 Leader 最新的数据状态 。如果 Follower 落后于 Leader ,Leader 发送缺失的事务日志,Follower 进行同步。只有当 大多数(Quorum)Follower 完成同步 后,Leader 才能进入 BROADCAST(广播)模式 ,开始正常处理请求。客户端发送写请求到 Leader 。Leader 生成全局递增的事务 ID(ZXID) :ZXID = [epoch(时期) | counter(递增计数)]确保所有事务有全局唯一的执行顺序。Leader 发送 PROPOSAL 给所有 Follower :事务以 PROPOSAL 形式广播给所有 Follower。Follower 接收 PROPOSAL 并返回 ACK :当过半 Follower ( Quorum ) 确认后,Leader 发送 COMMIT 。Leader 发送 COMMIT 并持久化:Leader 持久化事务日志 并发送 COMMIT 给所有 Follower。Follower 执行事务 并返回确认。

示例

客户端 -> Leader -> Follower1, Follower2, Follower3 写请求 -> 事务 ZXID=0x10001 (Proposal) -> Ack 全局唯一

事务 ID,格式如下:

ZXID = [epoch | counter]epoch(时期) :每次 Leader 选举时递增,标记不同的 Leader 时代。counter(计数器) :在同一时代内,每个事务递增,保证顺序。

示例

0x10000001 代表 epoch=1, counter=10x10000002 代表 epoch=1, counter=2

作用

总结一句话: ZAB 通过 Leader-Follower 复制 + 事务广播 ,确保 ZooKeeper 在 高可用、强一致 的分布式环境下正确运行。

来源:墨码行者

相关推荐