做 Kafka 监控,不能只看 Broker 是否存活。很多关键指标和告警都与副本同步、Leader 选举、消费者可见 offset 有关。因此需要先理解 AR、ISR、OSR、HW 和 LEO 这些基础概念。
核心要点
- Kafka 通过分区多副本机制提升容灾能力,同一分区的副本分布在不同 Broker 上。
- AR 是分区的全部已分配副本,ISR 是与 Leader 保持同步的副本集合,OSR 是同步滞后的副本集合。
- 默认情况下,Leader 故障时只有 ISR 中的副本才有资格被选为新 Leader。
- LEO 表示日志下一条待写入消息的 offset,HW 表示消费者可见的高水位。
- 对消费者而言,只能消费 HW 之前的消息;已经写入 Leader 但未完成足够同步的消息可能暂时不可见。
Kafka 多副本机制
Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量提升容灾能力。同一分区的不同副本保存相同消息,但在同一时刻,副本之间可能并不完全一致。
副本之间是“一主多从”关系:
- Leader 副本负责处理读写请求。
- Follower 副本负责从 Leader 副本同步消息。
很多时候,Follower 副本中的消息相对 Leader 副本会有一定滞后。副本分布在不同 Broker 中,当 Leader 副本故障时,可以从 Follower 副本中重新选举新的 Leader 对外提供服务。
Kafka 通过多副本机制实现故障自动转移。当 Kafka 集群中某个 Broker 失效时,仍然能尽量保证服务可用。
Kafka 消费端也具备一定容灾能力。Consumer 使用拉(Pull)模式从服务端拉取消息,并保存消费位置。当消费者宕机后恢复上线时,可以根据之前保存的位置重新拉取需要的消息,避免从头消费或直接丢失进度。
AR、ISR、OSR 分别是什么
| 概念 | 全称 | 含义 |
|---|---|---|
| AR | Assigned Replicas | 分区中所有已分配副本 |
| ISR | In-Sync Replicas | 与 Leader 副本保持一定程度同步的副本集合,包含 Leader |
| OSR | Out-of-Sync Replicas | 与 Leader 副本同步滞后过多的 Follower 副本集合 |
消息会先发送到 Leader 副本,然后 Follower 副本再从 Leader 副本拉取消息进行同步。同步期间,Follower 相对 Leader 会有一定滞后。
这里的“一定程度同步”指可忍受的滞后范围,这个范围可以通过参数配置。由此可见:
AR = ISR + OSR
正常情况下,所有 Follower 副本都应与 Leader 副本保持一定程度同步,即 AR = ISR,OSR 集合为空。
ISR 与 OSR 如何转换
Leader 副本负责维护和跟踪 ISR 集合中所有 Follower 副本的滞后状态。
- 当 Follower 副本落后太多或失效时,Leader 会把它从 ISR 集合中剔除。
- 当 OSR 集合中的 Follower 追上 Leader 后,Leader 会把它从 OSR 转移回 ISR。
默认情况下,当 Leader 副本发生故障时,只有 ISR 集合中的副本才有资格被选举为新的 Leader。OSR 集合中的副本没有机会成为新 Leader。不过,这个原则也可以通过修改相关参数配置来改变。
对监控来说,ISR 缩小通常是重要信号。它可能意味着某些副本同步异常、Broker 负载过高、网络抖动或磁盘性能问题。
HW 和 LEO 是什么
HW 是 High Watermark 的缩写,俗称高水位。它标识一个特定消息 offset,消费者只能拉取到这个 offset 之前的消息。
LEO 是 Log End Offset 的缩写,表示当前日志文件中下一条待写入消息的 offset。也可以理解为当前日志分区中最后一条消息 offset 加 1。

图中日志文件有 9 条消息,第一条消息的 offset(LogStartOffset)为 0,最后一条消息 offset 为 8。offset 为 9 的虚线框表示下一条待写入消息,因此当前 LEO 为 9。
图中 HW 为 6,表示消费者只能拉取 offset 0 到 5 的消息。offset 6、7、8 虽然已经存在,但对消费者不可见,原因可能是副本之间还未完成同步。
分区 ISR 集合中的每个副本都会维护自己的 LEO,而 ISR 集合中最小的 LEO 即为分区 HW。消费者只能消费 HW 之前的消息。
HW 和 LEO 的关系示例
下面通过一个简单示例理解 HW 与 LEO 的变化。
初始状态
假设某个分区的 ISR 集合有 3 个副本:1 个 Leader 副本和 2 个 Follower 副本。每个副本都维护自己的 LEO,且初始都是 3。ISR 中最小 LEO 是 3,因此 HW 也是 3。

Leader 写入新消息
此时生产者又生产了两条新消息。生产者写入只和 Leader 交互,所以新消息先写入 Leader 副本。Leader 的 LEO 变成 5,但两个 Follower 还没有同步,LEO 仍然是 3。
此时 ISR 中最小 LEO 仍是 3,因此 HW 还是 3。消费者看不到刚刚写入的两条消息。

部分 Follower 追上
过了一段时间,Follower01 已经追上 Leader,Follower02 还没有追上。Leader 和 Follower01 的 LEO 都是 5,Follower02 的 LEO 是 4。
HW 取 ISR 中最小 LEO,因此此时 HW 是 4。

所有 Follower 追上
再之后,Follower02 也追上 Leader,LEO 变成 5。此时 ISR 中所有副本 LEO 都是 5,HW 也变成 5。消费者可以消费 offset 0 到 4 这 5 条消息。

这些概念与 Kafka 监控有什么关系
理解这些概念后,很多 Kafka 监控指标会更容易解释:
| 监控现象 | 可能含义 |
|---|---|
| ISR 缩小 | Follower 同步滞后、Broker 异常、网络或磁盘问题 |
| Under Replicated Partitions 增加 | 分区副本不足或同步异常 |
| HW 推进缓慢 | ISR 中某些副本 LEO 滞后,消费者可见进度受限 |
| Consumer Lag 增大 | 消费者处理速度落后于可消费消息增长速度 |
| Leader 频繁切换 | Broker 稳定性、网络或 controller 相关问题需要排查 |
这些指标不能孤立看。比如 Consumer Lag 增大可能是消费者慢,也可能是上游写入突增;ISR 缩小可能影响 HW 推进,也可能进一步影响可消费消息范围。
FAQ
AR、ISR、OSR 的关系是什么?
AR 是所有已分配副本,ISR 是同步状态良好的副本,OSR 是同步落后的副本。可以简化理解为 AR = ISR + OSR。
为什么消费者不能读取 Leader 上所有已经写入的消息?
消费者只能读取 HW 之前的消息。Leader 上已经写入但未完成足够副本同步的消息,可能暂时不会推进 HW,因此对消费者不可见。
为什么默认只允许 ISR 副本成为新 Leader?
ISR 中的副本与 Leader 保持同步程度更高,选它们作为新 Leader 可以降低数据丢失风险。OSR 副本滞后过多,默认不适合作为新 Leader。
总结
Kafka 多副本机制的关键,是在可用性、同步进度和消费者可见性之间建立边界。AR 表示全部副本,ISR 表示同步良好的副本,OSR 表示同步落后的副本;LEO 表示日志写入进度,HW 表示消费者可见进度。做 Kafka 监控和排障时,理解这些概念,才能正确解释副本同步、Leader 选举、Consumer Lag 和高水位推进等现象。
关于作者
本文作者秦晓辉,Flashcat合伙人,文章内容是Flashcat技术团队共同沉淀的结晶,作者做了编辑整理,我们会持续输出监控、稳定性保障相关的技术文章,文章可转载,转载请注明出处,尊重技术人员的成果。
