Kafka ISR 与 AR 深度解析:副本同步机制核心概念
在 Kafka 的分布式架构中,副本机制是保证高可用和数据一致性的基石。而 ISR(In-Sync Replicas) 和 AR(Assigned Replicas) 则是理解副本同步机制的两个核心概念。
一、核心概念定义
1.1 AR:分区的所有副本
AR(Assigned Replicas):一个分区分配的所有副本集合,包括 Leader 和所有 Follower。
- Leader 副本:负责读写
- Follower 副本:同步数据
- AR = Leader + 所有 Follower
1.2 ISR:与 Leader 保持同步的副本
ISR(In-Sync Replicas):与 Leader 保持同步的 Follower 集合,包括 Leader 自身。只有 ISR 中的副本才有资格被选举为新的 Leader。
- ISR 动态集合:例如 [0, 1, 2, 3]
- 主题分区 AR:例如 [0, 1, 2, 3, 4]
- Leader 0:始终在 ISR 中
- Follower 1/2/3:同步正常,在 ISR 中
- Follower 4:同步落后,不在 ISR 中
1.3 官方定义
| 概念 | 全称 | 定义 | 包含 |
|---|---|---|---|
| AR | Assigned Replicas | 分区分配的所有副本 | Leader + 所有 Follower |
| ISR | In-Sync Replicas | 与 Leader 保持同步的副本 | Leader + 同步的 Follower |
二、ISR 的判定标准
2.1 同步的判断条件
// Kafka 源码中的判断逻辑(概念性)
class ReplicaManager {
def isInSync(replica: Replica): Boolean = {
// 1. 必须是 Follower(或 Leader)
// 2. 必须与 Leader 保持同步
// 主要判断依据:
// - Follower 的 LEO(Log End Offset)要接近 Leader 的 LEO
// - Follower 的拉取请求要及时
// - 在 replica.lag.time.max.ms 时间内有拉取请求
val config.replicaLagTimeMaxMs
replica.lastCaughtUpTimeMs
time.milliseconds()
(currentTimeMs - lastCaughtUpTimeMs) <= maxLagMs
}
}


