Kafka ISR是什么?
2 个回答
勇敢一点吧!我们不会比今年更年轻了。秦羽#### 1. **ISR 概念** Kafka 的 ISR(**In-Sync Replicas**)即同步副本集,是指某个 Kafka 分区中所有与 Leader 副本保持同步的副本集合。 在 Kafka 中,为了实现高可用性,每个分区的数据会在多个副本中复制,这些副本中有一个作为 **Leader**,其余的是 **Follower**。 只有那些紧跟 Leader 进度的 Follower 才会进入 ISR 集合。 #### 2. **ISR 机制的作用** - **保证数据可靠性**:ISR 代表了哪些副本和 Leader 保持了同步。如果 Leader 副本崩溃,Kafka 会从 ISR 中选择新的 Leader,保证分区的可用性。 - **高可用性**:即使某些副本临时不可用,只要 ISR 中的副本足够,Kafka 的正常读写不受影响。 - **严格的同步控制**:Leader 只有在 ISR 副本全部确认后,才会认为消息被成功提交(如果 `acks=all`)。 #### 3. **ISR 的更新机制** - **Follower 副本追赶**:Follower 副本会不断从 Leader 拉取数据,若某个 Follower 副本落后太多或宕机,它会被剔除出 ISR。 - **副本重新加入**:当 Follower 恢复后并追赶上 Leader 的最新进度,就会被重新加入 ISR 集合。 #### 4. **ISR 集合的维护** Kafka 定期检查 ISR 集合中的每个副本,如果: - 某个 Follower 落后太多(超过一定延迟阈值),Kafka 将从 ISR 集合中移除该 Follower。 - 当该 Follower 重新追赶上 Leader 时,它会再次加入 ISR 集合。 #### 5. **ISR 与可靠性保证** - **ack=1**:消息成功写入 Leader 即认为写成功,但不保证消息在 ISR 中的同步完成。 - **ack=all**:只有当消息成功写入所有 ISR 副本时,才返回确认。这样 Kafka 保证了即使 Leader 崩溃,其他 ISR 副本也能接管。 #### 6. **ISR 和数据一致性** - **数据副本同步机制**:所有 Follower 会周期性地从 Leader 拉取消息日志的最新数据,保证与 Leader 保持一致。 - Kafka 中的 Follower 不是实时同步,而是**异步复制**。所以在 Leader 副本宕机的瞬间,新的 Leader 可能会丢失最后一小部分未同步的数据。 #### 7. **ISR 维护的参数** - `replica.lag.time.max.ms`:Follower 与 Leader 副本最大允许的同步延迟时间。如果某个 Follower 超过这个时间未同步,它会被踢出 ISR。 - `min.insync.replicas`:最小的 ISR 副本数量。若 ISR 中的副本数量小于该值,Kafka 会拒绝写入请求,以保证数据可靠性。 #### 8. **Leader 选举与 ISR 的关系** 当 Leader 宕机时,Kafka 会从 ISR 集合中选举一个新的 Leader,因为这些副本的数据状态是同步的。 这意味着 Kafka 能保证消息不会因为 Leader 宕机而丢失,只要 ISR 中还有至少一个副本存在。 #### 9. **ISR 在分区重平衡中的表现** 当集群扩展或某些节点宕机后,Kafka 会触发**分区重平衡**。在此过程中,某些副本可能会临时退出 ISR,直到它们重新追上 Leader。 #### 10. **ISR 的挑战与优化** - **性能与可靠性权衡**:如果严格要求 Follower 和 Leader 实时同步(通过缩短 `replica.lag.time.max.ms`),写入性能会降低。 - **ISR 副本不足**:如果 ISR 数量低于 `min.insync.replicas`,会导致写入失败,保证数据可靠性的同时可能增加集群压力。 ### 总结 Kafka 的 ISR 是保证数据可靠性与可用性的关键机制。ISR 集合中的副本与 Leader 同步,确保即使 Leader 宕机,数据也不会丢失。通过合理配置 ISR 相关参数,可以在性能和可靠性之间取得平衡。编辑于 2023-11-10 21:37 •IP属地 美国举报评论收藏
勇敢一点吧!我们不会比今年更年轻了。澜夜师兄SR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,就是从分区的从节点中找出一些节点加入到ISR集合(min.insync.replicas这个参数设定ISR中的最小副本数是多少,默认值为1)。处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。follower从leader同步数据有一些延迟(延迟时间replica.lag.time.max.ms),一旦超过延迟时间,就会把这个这个follower从ISR列表中移除。被移除的followe会从leader复制数据进行追赶,一旦追赶上又可以重新进入ISR列表。一条 Kafka 消息,只有被 ISR 中的副本都接收到,才被视为“已同步”状态。这跟 zk 的同步机制不一样,zk 只需要超过半数节点写入,就可被视为已写入成功。发布于 2022-02-23 11:55 •IP属地 天津举报评论收藏
公众号进入网站体验更佳

