题目:介绍一下 Kafka 的 ISR 机制?
难度:medium
标签:db/mq/kafka, mq/kafka, general/knowledge, difficulty/medium
评分:未作答(跳过)
(未作答,请求讲解后跳过)
优点:
不足:
补充(必须掌握的完整知识链):
replica.lag.time.max.ms(默认 10s)→ 从 ISR 移除;追上后重新加入LEO ≥ HW,消费者只能看到 HW 之前已"安全"提交的消息min.insync.replicas:生产者 acks=all 时至少需要多少个 ISR 副本确认,默认 1replication.factor:副本总数,一般设为 3unclean.leader.election.enable:是否允许非 ISR 副本当选 Leader(默认 false,避免数据丢失)核心考点定位:考察对 Kafka 副本一致性协议的理解——ISR 是 Kafka 用副本换可用性、用 HW 换可靠性的核心机制。
知识点拆解:
replica.lag.time.max.ms(默认 10s)没追上 Leader 的 LEO → 踢出 ISRunclean.leader.election.enable=true,可以从 OBR 选(数据会丢)min.insync.replicas 决定 Producer acks=all 时需要多少 ISR 确认replication.factor=3 + min.insync.replicas=2 + acks=all从「副本有哪些」→「HW 怎么算」→「Leader 怎么换」,构成 Kafka 可靠性的完整链条。
考察方向:
min.insync.replicas 与 acks 的匹配关系unclean.leader.election 的使用边界延伸递进面试题:
min.insync.replicas=2 但 ISR 只剩 1 个,会怎样?request.timeout.ms),业务侧报错;需扩容副本或临时降级面试官您好,ISR 全称是 In-Sync Replicas,即"同步中的副本",是 Kafka 副本一致性机制的核心。
首先理解三个概念:AR 是分区的所有副本,包括 Leader 和 Follower,是配置时确定的静态集合;ISR 是 AR 中跟上 Leader 进度的副本子集,是动态变化的;OBR 是被踢出 ISR 的落后副本。
ISR 的动态规则是这样:Follower 如果超过 replica.lag.time.max.ms(默认 10s)没能追上 Leader 的 LEO,就会被踢出 ISR;追上之后重新加入。注意这是时间维度,不是 offset 落后多少条。
HW(High Watermark)是消费者能看到的最大 offset,等于所有 ISR 副本 LEO 的最小值。消费者只能读 HW 之前的消息,这样才能保证读到的消息已经在多个 ISR 副本里同步过,不会丢。
Leader 挂掉时,Controller 只会从 ISR 里选新 Leader,保证已提交消息不丢。如果 unclean.leader.election.enable=true,可以从 OBR 选,但会丢数据,一般生产不打开。
生产上的推荐配置是 replication.factor=3、min.insync.replicas=2、acks=all,含义是 3 副本至少 2 个确认写入才返回成功,Leader 挂了 ISR 里还有 1 个可用,兼顾可靠性和可用性。
这里有个坑:如果 min.insync.replicas=2 但 ISR 只剩 1 个,Producer 请求会阻塞直到超时,业务侧要监控 ISR 收缩告警。