文章目录
我们来深入讲解分布式一致性中另一个重要协议—— 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,并让所有节点恢复到一致状态
步骤如下:
- 所有节点进入 LOOKING 状态,开始选举 Leader;
- 投票基于:
- Epoch(逻辑时代编号)
- 最新事务 ID(Zxid);
- 多数节点同意后,选出 Leader;
- Leader 收集所有节点日志,选出一条最长有效日志作为主线(Leader’s history);
- 所有节点将日志同步为 Leader 的日志 → 数据一致!
阶段 2:原子广播阶段(Atomic Broadcast)
目标是:将新的事务请求广播到所有节点,确保顺序一致
步骤如下(两阶段提交机制):
- 客户端向 Leader 发起写请求;
- Leader 创建事务(Transaction Proposal),分配全局唯一 Zxid;
- Leader 将 Proposal 广播给 Follower;
- Follower 接收并写入本地 WAL,返回 ACK;
- 当 Leader 收到过半节点的 ACK → 提交(commit)该事务
- Leader 通知所有节点 commit,Follower 应用该操作 → 状态机执行成功。
Zxid 是什么?
- Zxid =
epoch << 32 | counter
; - 保证集群中每个事务全局唯一 + 有序。
类比现实:ZAB 过程像什么?
类比现实中“老师点名 + 同学记笔记”的场景:
- 老师(Leader)开始上课(发起写请求);
- 同学们(Follower)先抄草稿(Proposal);
- 当超过半数表示“记完了” → 老师说“这题记正式作业!”(Commit);
- 所有人把这题抄进作业本(状态机应用)。
总结本批内容重点:
模块 | 核心机制 |
---|---|
Leader 选举 | 根据 Epoch 和 Zxid,多数投票产生 Leader |
日志同步 | 所有节点统一为 Leader 的日志历史 |
广播机制 | 两阶段提交,过半确认后 commit |
原子性保障 | 无论节点何时恢复,都能追上 Leader 的日志 |
一致性来源 | 所有节点都以相同顺序执行事务日志(Zxid 保障顺序) |
🙋♂️ 欢迎留言讨论,分享你的技术经验与问题!
如果你在阅读过程中有任何问题,或者想了解更多技术细节,请在评论区留言,我会尽快回复。
📌 想要了解更多技术内容?关注我!
- 文章详情:点击这里关注我的CSDN专栏
🎯 关注“将臣三代”,获取更多价值, 回复【面试】获取专属PDF资料下载链接!!
每周更新最新技术文章和免费资源!
🌟 独家资源:
- 经典Java面试题解析
- 技术架构深度拆解
- 系统优化技巧与项目经验分享
- AI 技术探索