ISR(In-Sync Replicas)是什么,最多有多少个,这个数量怎么得来的
ISR(In-Sync Replicas)是 Kafka 中用于保障数据一致性与高可用的核心机制,其数量动态变化且受多因素约束。以下是详细解析:
# 📌 一、ISR 的定义与组成
核心概念
- ISR(同步副本集):指与分区的 Leader 副本保持数据同步的所有副本集合,包含 Leader 自身。
- AR(Assigned Replicas):分区的所有副本(含 Leader 和 Follower)。
- OSR(Out-Sync Replicas):滞后于 Leader 的副本集合。
- 关系公式:
AR = ISR + OSR
。
同步标准
- Follower 需在
replica.lag.time.max.ms
(默认 10 秒)内追上 Leader 的 LEO(Log End Offset,日志末端位移)。 - 若 Follower 超时未同步,会被移出 ISR 进入 OSR;追平后可重新加入。
- Follower 需在
# 🔢 二、ISR 的最大数量
上限约束
- ISR 最大数量 = 分区的副本数(Replication Factor)。
- 示例:若某分区配置副本数=3,则 ISR 最大为 3(Leader + 2 Follower)。
- 不可超越副本数上限:副本数受限于 Broker 数量(例如 3 Broker 时副本数≤3)。
动态变化性
- ISR 数量实际运行时可能小于副本数(如部分 Follower 滞后或宕机)。
- 极端情况:若所有 Follower 均滞后,ISR 可能仅剩 Leader。
# ⚙️ 三、ISR 数量的动态调整机制
Leader 主动维护
- Leader 周期性检查 Follower 同步状态:
- 使用
replica.lag.time.max.ms
判断滞后阈值(默认 10 秒)。 - 若 Follower 超时未拉取数据,移出 ISR;追平后重新加入。
- 使用
- 通过 ZooKeeper 持久化 ISR 变更记录,并通知集群更新元数据。
- Leader 周期性检查 Follower 同步状态:
故障场景的影响
- Broker 宕机:该 Broker 上的副本自动移出 ISR。
- Leader 切换:新 Leader 从剩余 ISR 副本中选举产生,并接管数据同步。
# ⚠️ 四、影响 ISR 数量的关键参数
min.insync.replicas
- 作用:定义 ISR 中必须保持的最小副本数(含 Leader)。
- 示例:若设为 2,当 ISR 数量<2 时,生产者写入会抛出异常,牺牲可用性以保数据安全。
- 建议值:生产环境通常设为 2(副本数=3 时)。
生产者 ACK 机制
acks=all
:需等待 ISR 所有副本写入成功,此时实际参与同步的副本数=当前 ISR 数量。acks=1
:仅需 Leader 写入成功,与 ISR 数量无关。
# 💎 总结
- ISR 是什么:动态维护的同步副本集(含 Leader),保障数据可靠性与故障转移。
- 最大数量:等于分区副本数,受限于 Broker 规模。
- 数量来源:由 Leader 基于同步状态(
replica.lag.time.max.ms
)动态调整,并受min.insync.replicas
强约束。
设计本质:ISR 机制在数据一致性(高副本数)与系统可用性(低副本数容忍)间动态平衡,用户可通过参数按需配置。
编辑 (opens new window)
上次更新: 2025/06/24, 00:41:57