首页/ 学科题库/ zookeeper/ ZooKeeper崩溃恢复机制
zookeeper 实战教程

ZooKeeper崩溃恢复机制

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
想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 ZooKeeper ZAB协议概述 下一篇 → ZooKeeper一致性与写请求链路