全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper崩溃恢复机制

崩溃恢复保证集群故障后数据一致性。

崩溃恢复机制

恢复触发条件

条件说明
Leader宕机Follower心跳超时检测
Leader网络断开连接检测超时
Follower重启重新加入集群

恢复流程

text
1. Follower检测Leader故障
2. 状态变LOOKING,发起选举
3. 选出新Leader(ZXID最大者优先)
4. 新Leader生成新Epoch
5. Leader与Follower数据同步
6. 同步完成后集群恢复服务

数据同步方式

方式说明触发条件
DIFF发送差异事务Follower落后少量
TRUNC截断未提交事务Follower有未提交数据
SNAP发送完整快照Follower落后大量

DIFF同步

text
Leader比较Follower ZXID
发送差距范围内的事务日志
Follower回放事务达到同步

TRUNC同步

text
Follower ZXID > Leader committed ZXID
说明Follower有旧Leader未提交提议
截断到Leader committed ZXID

Epoch更新

text
新Leader生成新Epoch
新Epoch必须 > 旧Epoch
ZXID = Epoch + Counter
保证新提议优先于旧提议

注意:Epoch机制防止旧Leader"假复活"影响数据一致性。

事务ID(ZXID)设计

ZXID结构

text
ZXID = 高32位Epoch + 低32位Counter

高32位: Leader纪元,每次选举递增
低32位: 事务计数器,每次写递增

ZXID示例

text
Epoch=1, Counter=5 → ZXID=0x0000000100000005

选举后Epoch递增:
Epoch=2, Counter=0 → ZXID=0x0000000200000000

Epoch作用

作用说明
标识Leader任期每次选举Epoch递增
区分新旧提议新Epoch提议优先
防止假复活旧Leader提议无效

Counter作用

作用说明
事务顺序同Epoch内递增
全局唯一每个事务唯一ID
一致性保证按Counter顺序提交

ZXID比较规则

text
比较ZXID大小:
先比较Epoch → Epoch大者优先
Epoch相同 → 比较Counter → Counter大者优先

ZXID应用

应用说明
选举ZXID最大者优先当选
同步根据ZXID差距同步
恢复Epoch递增防止冲突

提示:ZXID是ZooKeeper一致性的核心标识,贯穿所有流程。

要点总结

  • 崩溃恢复流程:选举、同步、Epoch更新
  • DIFF/TRUNC/SNAP三种同步方式
  • Epoch每次选举递增,防止旧Leader影响
  • ZXID = Epoch(高32位) + Counter(低32位)
  • Epoch标识Leader任期,Counter标识事务顺序
  • ZXID比较:Epoch优先,Counter次优
  • ZXID最大者优先当选Leader

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper一致性与写请求链路
下一篇 → ZooKeeper分布式屏障与锁管理
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库