企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Kafka 引入了 In-sync Replicas,也就是 ISR 副本集合。<ins>ISR 中的副本都是与 Leader 同步的副本,相反,不在 ISR 中的追随者副本就被认为是与 Leader 不同步的</ins>。<ins>ISR 不只是追随者副本集合,它必然包括 Leader 副本</ins>。甚至在某些情况下,ISR 只有 Leader 这一个副本。<mark>设置 ISR 主要是为了 Broker 宕掉之后,重新选举 Partition 的 Leader 时从 ISR 列表中选择,也就是说当 Leader 副本发生故障时,只有在 ISR 集合中的 Follower 副本才有资格被选举为新的Leader</mark>。 <br/> ISR 是 一个动态调整的集合 , 而 非 静 态 不 变 的 。 通 过 Broker 端`replica.lag.time.max.ms` 参数(Follower 副本能够落后 Leader 副本的最长时间间隔,默认值 10000)值来控制哪个追随者副本与 Leader 同步。只要一个 Follower 副本落后 Leader副本的时间不连续超过10秒,那么 Kafka 就认为该 Follower 副本与 Leader 是同步的,即使此时 Follower 副本中保存的消息明显少于 Leader 副本中的消息。如下图所示。 ![](https://img.kancloud.cn/0c/86/0c8667574284026c5542d5c106468882_999x240.png) <br/> 上图中,Follower1 与 Follower2 中的消息条数明显少于 Leader,但并不一定与Leader 不同步。<ins>Follower 副本唯一的工作就是不断地从 Leader副本拉取消息,然后写入到自己的提交日志中</ins>。如果这个同步过程的速度持续慢于 Leader副本的消息写入速度,那么在 `replica.lag.time.max.ms` 时间后,此 Follower 副本就会被认为是与 Leader 副本不同步的,因此不能再放入 ISR 中。此时,Kafka 会自动收缩 ISR 集合,将该副本**踢出**ISR。 <br/> 值得注意的是,倘若该副本后面慢慢地追上了 Leader 的进度,那么它是能够重新被加回 ISR 的。 <br/> 下图中的绿色箭头描述了 Kafka 数据流副本同步情况,其中红色分区为Leader。 ![](https://img.kancloud.cn/d0/bd/d0bd5c5c1bbc188c3449c7d059ced1b2_787x557.png)