Kafka 的 ISR 是什么
Kafka 的 ISR 是什么?(超清晰版)
ISR = In-Sync Replicas
中文叫:同步副本集合
它是 Kafka 保证消息不丢失、高可用的核心机制。
1. 先搞清楚角色
一个 Partition 一定有:
- Leader 副本:负责读写
- Follower 副本:只同步数据,不对外提供服务
- ISR:当前跟 Leader 保持同步的 Follower 集合(Leader 自己也在 ISR 里)
2. ISR 到底是什么?
ISR 是一个动态列表,里面包含:
- Leader
- 所有同步速度足够快、没有掉队的 Follower
满足两个条件才会在 ISR 里:
- Follower 与 Leader网络连接正常
- Follower 同步的消息落后 Leader不超过阈值
默认:replica.lag.time.max.ms = 10000ms(10秒)
只要 Follower 在 10s 内没跟上,就会被踢出 ISR。
3. ISR 有什么用?(核心作用)
① 保证消息不丢失
生产者acks=-1/all时:
消息必须被 ISR 中所有副本都写入成功,才返回成功。
这样即使 Leader 挂了,ISR 里一定有完整数据,不会丢消息。
② 选举新 Leader 只能从 ISR 里选
Kafka 有一条铁律:
新 Leader 必须从 ISR 中选举
不在 ISR 里的 Follower 数据是残缺的,绝对不能当 Leader,否则会丢数据。
4. 什么副本会被踢出 ISR?
- 挂掉的 Follower
- 网络卡顿、GC 停顿、同步太慢
- 落后 Leader 超过
replica.lag.time.max.ms
踢出后,它就变成OSR(Out-of-Sync Replicas)。
恢复正常后,会重新追上 Leader,自动加回 ISR。
5. 最小 ISR 机制(防脑裂、防丢数据)
配置:min.insync.replicas=2
含义:
- ISR 里至少要有 2 个副本(Leader + 1 Follower)
- 否则写入会直接失败,避免只有 Leader 一个人在 ISR 里,一旦挂掉就彻底丢数据。
6. 一句话总结 ISR
ISR = 跟 Leader 数据一致、同步正常的副本集合。
只有 ISR 里的副本才能被选为 Leader,只有 ISR 确认写入才算安全写入。
