Kafka 关键概念,什么是AR、OSR、ISR、HW和LEO以及之间的关系

做 Kafka 监控前,需要理解副本、AR、ISR、OSR、HW 和 LEO 等关键概念。本文解释这些术语的定义、关系和消费者可见性的变化过程,帮助理解 Kafka 副本同步与高水位机制。

作者 秦晓辉@快猫星云

做 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 = ISROSR 集合为空。

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。

Kafka Log

图中日志文件有 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。

Kafka Log

Leader 写入新消息

此时生产者又生产了两条新消息。生产者写入只和 Leader 交互,所以新消息先写入 Leader 副本。Leader 的 LEO 变成 5,但两个 Follower 还没有同步,LEO 仍然是 3。

此时 ISR 中最小 LEO 仍是 3,因此 HW 还是 3。消费者看不到刚刚写入的两条消息。

Kafka Log

部分 Follower 追上

过了一段时间,Follower01 已经追上 Leader,Follower02 还没有追上。Leader 和 Follower01 的 LEO 都是 5,Follower02 的 LEO 是 4。

HW 取 ISR 中最小 LEO,因此此时 HW 是 4。

Kafka Log

所有 Follower 追上

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

Kafka Log

这些概念与 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技术团队共同沉淀的结晶,作者做了编辑整理,我们会持续输出监控、稳定性保障相关的技术文章,文章可转载,转载请注明出处,尊重技术人员的成果。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 Kafka
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云