什么是ZAB协议?


我们来深入讲解分布式一致性中另一个重要协议—— ZAB 协议(Zookeeper Atomic Broadcast),这是 Zookeeper 系统中用于实现 强一致性、主从同步、事务广播的核心协议

它和 Raft、Paxos 一样,都是解决多个节点之间如何就一组状态达成一致的问题。

我会分批讲解,包括:ZAB 的背景、角色、核心流程、崩溃恢复、广播保障机制、与 Raft 的对比等。


第一部分:ZAB 协议是什么?解决什么问题?


1. 协议定义:

ZAB(ZooKeeper Atomic Broadcast)是 ZooKeeper 中为保证 分布式事务的顺序性与原子性 所设计的一种专有一致性协议。

它的目标是:

确保即使主节点故障,系统中仍能保持数据的有序性、原子性和一致性。


2. ZAB 协议的核心职责:

  • 选主(Leader Election)
  • 保证事务日志的原子广播(Atomic Broadcast)
  • 支持故障节点恢复后的数据同步
  • 保证整个集群的线性一致性

3. 使用场景:

Zookeeper 广泛应用于:

  • 分布式锁
  • 配置中心
  • 服务注册/发现
  • 元数据一致性存储

Zookeeper 的每次写操作都通过 ZAB 协议广播并持久化。


第二部分:ZAB 的节点角色与生命周期


1. 节点角色划分:

角色职责
Leader接收客户端写请求,生成事务,广播日志
Follower接收 Leader 的广播,写入日志并响应
Observer不参与写入投票,仅提供读扩展能力(如缓存)

2. 节点状态机(5种状态):

状态含义
LOOKING正在选主
FOLLOWING成为 Follower 后跟随 Leader
LEADING成为 Leader
OBSERVING只读节点,不参与选举
DOWN崩溃中止状态

第三部分:ZAB 的核心机制 = 选主 + 同步 + 广播


ZAB 协议分两大阶段(必须牢牢记住):


阶段 1:崩溃恢复阶段(Crash Recovery)

目标是:选出一个 Leader,并让所有节点恢复到一致状态

步骤如下:
  1. 所有节点进入 LOOKING 状态,开始选举 Leader;
  2. 投票基于:
    • Epoch(逻辑时代编号)
    • 最新事务 ID(Zxid);
  3. 多数节点同意后,选出 Leader;
  4. Leader 收集所有节点日志,选出一条最长有效日志作为主线(Leader’s history)
  5. 所有节点将日志同步为 Leader 的日志 → 数据一致!

阶段 2:原子广播阶段(Atomic Broadcast)

目标是:将新的事务请求广播到所有节点,确保顺序一致

步骤如下(两阶段提交机制):
  1. 客户端向 Leader 发起写请求;
  2. Leader 创建事务(Transaction Proposal),分配全局唯一 Zxid;
  3. Leader 将 Proposal 广播给 Follower;
  4. Follower 接收并写入本地 WAL,返回 ACK;
  5. 当 Leader 收到过半节点的 ACK → 提交(commit)该事务
  6. Leader 通知所有节点 commit,Follower 应用该操作 → 状态机执行成功。

Zxid 是什么?

  • Zxid = epoch << 32 | counter
  • 保证集群中每个事务全局唯一 + 有序。

类比现实:ZAB 过程像什么?

类比现实中“老师点名 + 同学记笔记”的场景:

  1. 老师(Leader)开始上课(发起写请求);
  2. 同学们(Follower)先抄草稿(Proposal);
  3. 当超过半数表示“记完了” → 老师说“这题记正式作业!”(Commit);
  4. 所有人把这题抄进作业本(状态机应用)。

总结本批内容重点:

模块核心机制
Leader 选举根据 Epoch 和 Zxid,多数投票产生 Leader
日志同步所有节点统一为 Leader 的日志历史
广播机制两阶段提交,过半确认后 commit
原子性保障无论节点何时恢复,都能追上 Leader 的日志
一致性来源所有节点都以相同顺序执行事务日志(Zxid 保障顺序)

🙋‍♂️ 欢迎留言讨论,分享你的技术经验与问题!

如果你在阅读过程中有任何问题,或者想了解更多技术细节,请在评论区留言,我会尽快回复。

📌 想要了解更多技术内容?关注我!

🎯 关注“将臣三代”,获取更多价值, 回复【面试】获取专属PDF资料下载链接!!

每周更新最新技术文章和免费资源!

🌟 独家资源:

  • 经典Java面试题解析
  • 技术架构深度拆解
  • 系统优化技巧与项目经验分享
  • AI 技术探索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将臣三代

每一份打赏都是创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值