① 三 Broker 集群(单分区,3 副本)
Leader
Follower (in ISR)
OSR(被踢出)
Dead
Offset < HW(消费者可见)
Offset ≥ HW(仅在副本本地)
min.insync.replicas =
| 分区 | Leader | ISR | OSR | HW | Status |
|---|---|---|---|---|---|
| P0 | - | - | - | - | - |
② Broker 操作 & 故障注入
③ 事件日志
HW 推进的「滞后一个 RTT」
手工一步步看:Producer 写 → Follower fetch → Leader 重算 HW → Follower 同步 HW。 每点一次「下一步」推进一小步,看清楚 HW 永远比真实写入慢 1 个 RTT。
Unclean Leader Election:开 vs 关
场景:3 副本,Producer 已写入 100 条。设定 B3 因长时间网络抖动早已被踢出 ISR(只同步到 30 条)。 现在 B1 (Leader) 和 B2 (Follower) 同时宕机,集群只剩下 OSR 中的 B3。
unclean.leader.election.enable = false(默认)
unclean.leader.election.enable = true
Leader Epoch 解决的「HW 截断 bug」
演示 0.11 之前的「按 HW 截断」恢复路径,与 0.11 之后基于 Leader Epoch 的恢复路径, 在同一场景下产生完全不同的结果。