Skip to content
困难

一句话答案

Raft 将一致性分解为 Leader 选举、日志复制、安全性三个子问题,多数派同意即提交,比 Paxos 更易理解和实现。

核心要点

ZAB(ZooKeeper Atomic Broadcast)协议: ZooKeeper 使用的原子广播协议,保证分布式数据的一致性。

ZAB 的两种模式:

① 恢复模式(Recovery Mode)
   触发条件:Leader 崩溃、集群启动、网络分区恢复
   目标:选出新 Leader + 数据同步
   流程:
     1. 选举阶段:选出拥有最大 ZXID(事务ID)的节点作为准 Leader
     2. 发现阶段:准 Leader 收集各 Follower 的最新事务
     3. 同步阶段:准 Leader 将最新数据同步给所有 Follower
     4. 同步完成,多数 Follower 确认 → 进入广播模式

② 广播模式(Broadcast Mode)
   触发条件:Leader 选举完成 + 数据同步完毕
   目标:处理客户端写请求
   流程:
     1. 客户端写请求 → Leader
     2. Leader 生成事务提案(Proposal),分配全局递增 ZXID
     3. Leader 将 Proposal 发给所有 Follower
     4. Follower 写入本地日志 → 返回 ACK
     5. Leader 收到半数以上 ACK → 发送 Commit
     6. Follower 收到 Commit → 提交事务

ZAB vs Raft 对比:

维度ZABRaft
设计目标高可用的顺序广播协议(ZooKeeper 专用)通用分布式共识算法
Leader 选举选拥有最大 ZXID 的节点随机超时 + 多数投票(日志最新者优先)
任期标识epoch(纪元)term(任期)
日志标识ZXID(epoch + counter 组合的 64 位 ID)term + logIndex
数据同步恢复模式有专门的同步阶段(DIFF / TRUNC / SNAP)通过 AppendEntries 逐步对齐
模式切分显式分为恢复模式和广播模式无显式模式切分,选举和日志复制无缝衔接
读请求默认 Follower 可读(可能读到旧数据),可通过 sync 强制读 Leader默认读 Leader(强一致)

相同点:

  • 都是 Leader-based 的共识协议(单 Leader 负责写入)
  • 都需要多数节点(Quorum)确认才能提交
  • 都保证已提交的日志不会丢失
  • 都通过心跳机制检测 Leader 存活

关键差异总结: ZAB 是为 ZooKeeper 量身定制的,侧重于主备模式下的原子广播和崩溃恢复;Raft 是通用共识算法,更强调可理解性和工程友好性。从实现角度看,ZAB 的恢复阶段更复杂(需要处理多种同步场景),而 Raft 通过简单的日志匹配机制统一处理。

三、分布式事务

追问与易错

追问方向:

  • Raft 脑裂怎么解决?
  • 日志复制和提交的区别?
  • Raft 和 Paxos 优缺点?

易错点:

  • ❌ Raft 两个 Leader 会脑裂——新 Leader term 更大旧自动降级
  • ❌ Leader 活着就不丢数据——需复制到多数节点

💡 记忆锚点

Raft 像班级选班长:随机倒计时谁先喊"选我"谁当候选人(随机超时),超过半数同学举手就当选(多数派投票),班长负责记笔记再抄给全班(日志复制),班长请假就重新选(term递增,旧班长自动让位)。三件事:选领导、抄笔记、保安全。