除了读写副本、管理分区和副本的功能之外,副本管理器还有一个重要的功能,那就是管理 ISR。这里的管理主要体现在两个方法:
- maybeShrinkIsr 方法:作用是阶段性地查看 ISR 中的副本集合是否需要收缩;收缩是指,把 ISR 副本集合中那些与 Leader 差距过大的副本移除的过程。所谓的差距过大,就是 ISR 中 Follower 副本滞后 Leader 副本的时间,超过了 Broker 端参数 replica.lag.time.max.ms 值的 1.5 倍。
- maybePropagateIsrChanges 方法:作用是定期向集群 Broker 传播 ISR 的变更。
maybeShrinkIsr 方法
maybeShrinkIsr的逻辑就是遍历该副本管理器上所有分区对象,依次为这些分区中状态为 Online 的分区,执行 Partition 类的 maybeShrinkIsr 方法:
private def maybeShrinkIsr(): Unit = {
trace("Evaluating ISR list of partitions to see which replicas can be removed from the ISR")
// Shrink ISRs for non offline partitions
allPartitions.keys.foreach { topicPartition =>
nonOfflinePartition(topicPartition).foreach(_.maybeShrinkIsr(config.replicaLagTimeMaxMs))
}
}
它实际上执行了partition的maybeShrinkIsr方法

本文介绍了Kafka中ISR(In-Sync Replicas)的管理机制,包括如何通过maybeShrinkIsr方法移除落后的副本,以及如何使用maybeExpandIsr方法增加符合条件的副本。此外,还介绍了ISR变更如何通过maybePropagateIsrChanges方法在整个集群中进行传播。
最低0.47元/天 解锁文章
9308

被折叠的 条评论
为什么被折叠?



