---
title: "Kafka Simulator v1.3 — 持久性与副本复制"
date: 2026-08-04T00:00:00.000Z
author: "michal"
excerpt: "复制模块登场：ISR 机制、高水位、acks=all 与 min.insync.replicas、Leader 选举，以及一次 unclean 选举究竟会丢掉什么。十二个场景，讲透 Kafka 赖以成名的那些保证。"
---
v1.3 为 [Kafka Simulator](/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 移动、看见高水位守住不动，课程的其余部分就只是同一个你已经理解的系统的一系列变奏。

打开[模拟器](/kafka-simulator/)，设置 `RF=3` 和 `min.insync.replicas=2`，然后开始杀 broker。