当前位置: 首页 > news >正文

kafka的ISR机制

ISR 的工作机制

ISR 机制的全称是:

In-Sync Replicas
(同步副本集/同步副本机制)

1. 进入 ISR

当一个追随者副本启动时,它会开始从领导者副本拉取消息。如果它能够持续地、及时地追上领导者的最新数据(即 LEO - Log End Offset),它就会被领导者认为是“同步的”,并维持在 ISR 列表中。

2. 脱离 ISR(核心机制)

如果某个追随者副本落后了,比如因为网络问题、机器负载过高、GC 停顿等导致它长时间没有从领导者拉取数据,它就会被领导者从 ISR 集合中移除。

判断一个副本是否“失步”的标准,在旧版本中是基于延迟的消息数,现在主要是基于时间参数:

  • replica.lag.time.max.ms(默认 30秒):如果一个追随者副本在此时间内没有向领导者发起获取数据的请求(如 FetchRequest),或者它的数据落后领导者超过这个时间阈值,领导者就会将其从 ISR 中踢出。

3. 重新回到 ISR

被踢出 ISR 的副本并不会停止工作,它仍然会继续尝试从领导者拉取数据。当这个“落后”的副本重新追上了领导者的最新进度(即它的 LEO 与领导者的 LEO 相差在允许的范围内),领导者会将它重新加入 ISR 集合。


ISR 的核心作用

1. 在可用性和一致性之间取得平衡

如果没有 ISR,为了保证数据一致性,每次写入可能都需要所有副本确认,但只要有一个副本缓慢或宕机,整个系统就会不可用或变得极慢。
有了 ISR,Kafka 只需要关注那些健康的、同步的副本。只要 ISR 中至少有一个副本存活,分区就是可用的。

2. 实现“至少一次”语义的基石

当生产者配置 acks=all 时,它实际上是在等待 ISR 中的所有副本 都确认收到消息后,才认为发送成功。这确保了只要 ISR 中有一个副本存活,成功写入的消息就不会丢失。

3. 领导者选举

当分区的领导者副本发生故障时,Kafka 不会从所有副本中随意选择一个作为新领导者,而是优先从 ISR 集合中选举一个新的领导者。

  • 为什么? 因为 ISR 中的副本都拥有最新的数据,从它们中选出的新领导者能保证数据不丢失,维持数据的一致性。


工作机制图解

假设一个分区有 3 个副本:Leader (L), Follower1 (F1, ISR), Follower2 (F2, ISR)。

  1. 正常状态:

    • L, F1, F2 都在 ISR 中。

    • 生产者发送消息,L 和 F1 很快写入,但 F2 因网络问题开始变慢。

  2. Follower 失步:

    • F2 的延迟超过了 replica.lag.time.max.ms(例如 30秒)。

    • 领导者 L 将 F2 从 ISR 中移除。当前 ISR = [L, F1]。

  3. 生产者写入:

    • 生产者配置了 acks=all,它只需要等待 ISR ([L, F1]) 中的所有副本确认即可,无需等待缓慢的 F2。这保证了写入性能和可用性。

  4. Follower 恢复:

    • F2 的网络恢复,并快速追上了领导者的最新数据。

    • 领导者 L 检测到 F2 已同步,将其重新加入 ISR。当前 ISR = [L, F1, F2]。

  5. 领导者故障:

    • 假设 Leader (L) 宕机。

    • Kafka 控制器会从当前的 ISR ([F1, F2]) 中选举一个新的领导者(比如 F1)。由于 F1 和 F2 数据都是最新的,这个切换过程不会造成数据丢失。


关键配置参数

  • replica.lag.time.max.ms:决定追随者副本是否“失步”的关键时间阈值。默认 30000ms (30秒)。

  • min.insync.replicas:非常重要的参数。它定义了生产者设置 acks=all 时,所必需的最小 ISR 数量。

    • 例如,如果你设置 min.insync.replicas=2,那么当 ISR 中的副本数少于 2 个时(比如只剩下领导者自己),生产者写入会失败(抛出 NotEnoughReplicasException)。这是一个可用性和可靠性的权衡:你宁愿让服务不可用,也不接受数据可能丢失的风险。

总结

ISR 机制是 Kafka 设计精妙之处的一个完美体现。它通过动态维护一个“健康副本池”,巧妙地解决了分布式系统中数据同步、故障恢复和高可用性之间的矛盾。它不仅是数据一致性的保障,也是高性能写入和高可用性选举的基础。

http://www.rkmt.cn/news/60361.html

相关文章:

  • 快速了解Linux中的lsmod命令
  • Windows Server 2022 桌面体验版采用Deployment Center 安装TeamCenter 2506 (上)
  • 2025 最新废气焚烧炉厂家推荐排行榜:聚焦化工医药农药行业,甄选技术创新与合规适配优质企业化工废气焚烧炉/农药废气焚烧炉/医药废气焚烧炉/RTO 废气焚烧炉公司推荐
  • kafka 的ack机制
  • AcWing 788:逆序对的数量 ← 树状数组 + 离散化(数组 + sort + STL map)
  • 2025广州权威的留学机构排名榜
  • 2025广州权威的留学机构排名前十
  • Vue3快速笔记
  • 详细介绍:技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • 2025广州有哪些办理出国留学机构
  • 2025北京留学中介机构名单
  • odoo12 跟踪所有的模型调用的onchange 方法
  • 对于高增量数据库的解决方案记录(暂时修改)
  • MySQL权限管理的坑你踩了没有?
  • 2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选
  • 2025北京留学中介哪些机构好一点
  • k8s chain
  • 不丢帧、低延迟!图像采集卡的 5 步工作原理,看懂就是专家
  • 2025年服装整烫专用设备定做厂家权威推荐榜单:服装小型整烫设备/服装隧道整烫设备/仙桃服装整烫设备源头厂家精选
  • Spring Data JPA 最佳实践【1/2】:实体设计指南
  • 2025年11月呼叫中心系统品牌推荐评测报告:从稳定性到AI能力的解决方案剖析
  • 2025广州最大的留学中介是哪家
  • 2025北京申请留学机构哪家好
  • QQueue队列
  • 2025年11月数据标注平台推荐评测报告:从安全部署到智能辅助解决方案剖析
  • 2025年11月北京会计师事务所推荐:权威榜单与选择指南
  • 2025年远程高能点火器实力厂家权威推荐榜单:遥控高能点火器/防爆高能点火器/便携式高能点火器源头厂家精选
  • php Http请求 GET方式
  • plt.show()什么时候不用写?什么时候必须写?
  • Pyplot vs Seaborn 功能实现对比(直方图+箱线图) Pyplot → Seaborn 快速迁移指南