本文是大数据系列第 63 篇,深入解析 Kafka 副本机制、ISR 原理与 Leader 选举策略,理解这些机制是构建高可用 Kafka 集群的关键。

完整图文版(含截图):CSDN 原文 | 掘金

副本机制概述

Kafka 通过在多个 Broker 上保存分区的多个副本(Replica)来实现高可用和数据持久化。每个分区都有一个 Leader 副本和若干 Follower 副本:

  • Leader 副本:处理所有客户端的读写请求,是数据的主入口
  • Follower 副本:不对外提供服务,只负责从 Leader 同步数据,在 Leader 宕机时参与选举

副本分布在不同的 Broker 上,单个 Broker 宕机不会导致数据丢失。

ISR(In-Sync Replicas)同步副本集

ISR 是 Kafka 高可用机制的核心概念,指与 Leader 保持同步的副本集合。

ISR 的维护规则

Follower 副本需同时满足以下条件才能留在 ISR 中:

  1. 会话存活:Follower 必须与 ZooKeeper 保持活跃会话(Kafka 2.8+ 使用 KRaft 后改为与 Controller 通信)
  2. 同步不落后:Follower 的数据同步延迟不超过阈值,由 replica.lag.time.max.ms 控制(默认 30 秒)
# 副本允许落后 Leader 的最大时间(超过则从 ISR 移除)
replica.lag.time.max.ms=30000

当 Follower 同步速度跟不上 Leader 的消息写入速度时,会被移出 ISR,进入 OSR(Out-of-Sync Replicas)列表。当 Follower 追上 Leader 后,会重新加入 ISR。

ISR 的重要性

只有 ISR 中的所有副本都确认接收到消息后(当 acks=all 时),该消息才被认为是”已提交”的。这保证了:

“只要至少有一个同步副本存活,已提交的消息就不会丢失。“

故障恢复场景

场景一:部分副本故障

当某个 Follower 副本所在的 Broker 宕机后恢复:

  1. 该 Follower 重新启动,发现自己的数据落后于 Leader
  2. Follower 向 Leader 发起数据拉取请求,从断点处开始同步
  3. 追上 Leader 的 HW(High Watermark)后,重新加入 ISR

场景二:Leader 副本故障

当 Leader 所在 Broker 宕机:

  1. Controller(集群控制器)检测到 Leader 宕机
  2. 从当前 ISR 列表中选举新的 Leader
  3. 其他 Follower 开始从新 Leader 同步数据
  4. 如果 ISR 为空,触发 unclean leader election(脏选举)

Leader 选举机制

正常 Leader 选举

Leader 选举由 Kafka Controller 负责协调,优先从 ISR 中选举:

ISR = [Broker1, Broker2, Broker3]
当 Broker1(Leader)宕机后:
新 Leader 从 {Broker2, Broker3} 中选取 → 优先选 Broker2(ISR 中第一个)

Controller 本身也有高可用保障——在 ZooKeeper 模式下,多个 Broker 竞争在 ZooKeeper 注册临时节点,成功者成为 Controller。

Unclean Leader Election(脏选举)

当 ISR 为空(所有同步副本都宕机)时,Kafka 面临两难选择:

策略配置特点
等待 ISR 恢复unclean.leader.election.enable=false(默认)强一致性,可能长时间不可用
从 OSR 中选 Leaderunclean.leader.election.enable=true高可用,但可能丢失数据

生产建议:金融、订单等对数据一致性要求极高的场景,保持默认值 false;对可用性要求高于一致性的场景(如日志收集),可设为 true

ISR vs 多数投票对比

Kafka 的 ISR 机制与 Raft、ZAB 等采用的多数投票机制有所不同:

特性ISR 机制多数投票
容忍 f 个副本故障需要的副本数f+12f+1
3 副本最多容忍故障数21
写延迟等待所有 ISR等待多数确认
性能更高(副本少时)相对较低

ISR 的优势在于:在副本数较少的情况下,能比多数投票容忍更多的节点故障,同时保持相近的吞吐量。

HW 与 LEO

理解 Kafka 副本同步还需掌握两个关键概念:

  • LEO(Log End Offset):每个副本当前写入的最新消息偏移量 + 1
  • HW(High Watermark):消费者可见的最大偏移量,等于 ISR 中所有副本 LEO 的最小值
ISR 中各副本的 LEO:
  Leader: LEO=100
  Follower1: LEO=98
  Follower2: LEO=97

HW = min(100, 98, 97) = 97
消费者只能消费到 offset=96 的消息

HW 机制确保消费者只能读取已被所有 ISR 副本确认的消息,从而保证 Leader 切换后消费者不会读到丢失的数据。