v1.3 为 Kafka Simulator 打开了复制模块——Kafka 所有持久性保证背后的那套机制。这是迄今最大的一个包,带来 12 个新场景,把课程推进到 125 个中的 45 个。
v1.3 里有什么
复制是 Kafka 的保证变得具体的地方,也是它们可能丢失的地方:
- ISR 机制 —— 当 follower 落后时同步副本集合如何收缩、追上后又如何扩张,以及为什么“是否在这个集合里”才是全部关键。
- 高水位 —— 为什么消费者只能读到 HW,以及为什么 Leader 明明还在接受写入、HW 却有时停止推进。
acks=all与min.insync.replicas—— 两者的确切关系:为什么一个 broker 挂掉后生产者仍能写入,第二个挂掉后却开始收到NotEnoughReplicas。- Leader 选举 —— 故障后由哪个副本接管,以及为什么它必须来自 ISR。
- Unclean Leader 选举 —— 允许一个不同步的副本成为 Leader,你实际会失去什么,逐个 offset 地看清楚。
整个模拟器正是为了让这个模块变得可见而构建的。真正有意思的行为完全存在于状态转换之中——broker 死掉前后、ISR 变化前后——而这恰恰是白板画不出来的东西。
自由模式新增:active/passive 拓扑
v1.3 还在自由模式的沙盒中开启了第一种多数据中心形态:active/passive —— 两个区域、单向 mirror,以及一个可以随时触发的故障转移。这是看清”复制不再只是单集群内部事务”的最简单方式。
DR 课程——MirrorMaker 2、offset 转换、failback——会更晚到来,在 v1.8。这里给的是沙盒,提前解锁是有意为之:远在讲解它的场景到来之前,这个形态就值得动手玩一玩。接下来的三个版本包每个都会再加一种拓扑。
为什么复制是锚点
生产者和消费者都建立在这些保证之上;存储、事务和多数据中心则是对它们的扩展。一旦你能看见 ISR 移动、看见高水位守住不动,课程的其余部分就只是同一个你已经理解的系统的一系列变奏。
打开模拟器,设置 RF=3 和 min.insync.replicas=2,然后开始杀 broker。