Kafka的ISR和OSR机制
基本概念
1
2
3
4
5AR (Assigned Replicas): 所有副本
ISR (In-Sync Replicas): 同步副本集合
OSR (Out-of-Sync Replicas): 非同步副本集合
关系:AR = ISR + OSRISR(In-Sync Replicas)
1
2
3
4
5
6
7
8特点:
- 与leader保持同步的follower集合
- 包含leader副本自身
- 动态调整:follower可能进入或退出ISR
判断标准:
1. replica.lag.time.max.ms内有同步请求
2. 副本落后leader的消息数不超过replica.lag.max.messagesOSR(Out-of-Sync Replicas)
1
2
3
4
5
6
7
8
9特点:
- 与leader副本同步滞后的follower集合
- 暂时无法参与副本选举
- 会尝试追赶leader数据
产生原因:
1. 网络延迟或阻塞
2. follower所在broker负载过高
3. follower崩溃或重启动态维护机制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// 伪代码展示ISR维护逻辑
class Partition {
void checkISRUpdate() {
// 1. 检查follower延迟
for (Replica follower : AR) {
if (inISR(follower)) {
if (isLagging(follower)) {
moveToOSR(follower);
}
} else {
if (!isLagging(follower)) {
moveToISR(follower);
}
}
}
// 2. 持久化ISR变更
if (isrChanged) {
updateZkIsrChange();
}
}
}与可用性的关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16acks配置影响:
acks=all (-1):
- 等待ISR中所有副本确认
- 最高可靠性
- 较低吞吐量
acks=1:
- 仅等待leader确认
- 中等可靠性
- 中等吞吐量
acks=0:
- 不等待确认
- 最低可靠性
- 最高吞吐量监控指标
1
2
3
4
5
6
7
8
9
10
11
12关键监控项:
1. UnderReplicatedPartitions
- 表示副本同步滞后的分区数
- 反映系统健康状况
2. IsrExpandsPerSec/IsrShrinksPerSec
- ISR集合扩大/收缩的频率
- 反映系统稳定性
3. ReplicaMaxLag
- follower落后leader的最大消息数
- 反映副本同步状况