Kafka 的 ISR 机制

ISR 是什么

ISR,是 In-Sync Replicas,同步副本的意思
在 Kafka中,每个主题分区可以有多个副本(replica)。ISR 是与主副本(Leader Replica)保持同步的副本集合。

ISR 的作用

ISR 机制就是用于确保数据的可靠性和一致性的

数据一致性保证:

当消息被写入 Kafka 的分区时,它首先会被写入 Leader,然后 Leader 将消息复制给 ISR 中的所有副本。只有当 ISR 中的所有副本都成功地接收到并确认了消息后,主副本才会认为消息已成功提交。这种机制确保了数据的可靠性和致性。
生产者在写入数据时,可以通过设置 acks 参数来控制数据的一致性级别。设置 acks=all(或acks=-1)

故障容错能力:

如果领导副本发生故障,Kafka 会从 ISR 中选取一个新的领导副本。由于 ISR 中的副本与之前的领导副本保持同步,新的领导副本能够继续提供服务,而不会丢失数据。

ISR 的维护机制

领导副本更新 ISR :

领导副本会定期检查每个追随者副本的状态。如果某个追随者副本在指定时间内未能跟上领导副本的更新,领导副本会将其从 ISR 中移除。

追随者副本重新加入 ISR :

当追随者副本追上了领导副本的日志进度(即达到了与领导副本相同的日志偏移量),领导副本会将其重新加入ISR。

ISR 列表维护

在 Kafka 中,ISR(In-Sync Replicas)列表的维护是通过副本状态配置参数来进行的。具体的 ISR 列表维护机制在不同的 Kafka 版本中有所变化。

before 0.9.x

在 0.9.x 之前的版本,Kafka 有一个核心的参数 :replica.lag.max.messages 表示如果 Follower 落后 Leader 的消息数量超过了这个参数值,就认为 Follower 就会从 ISR 列表里移除。

但是,基于 replica.1ag.max.messages 这种实现,在瞬间高并发访问的情况下会有问题:比如Leader瞬间接收到几万条消息,然后所有 Follower 还没来得及同步过去,此时所有 Follower 都会被踢出 ISR 列表。

after 0.9.x

Kafka 从 0.9.x 版本开始,引入了 replica.1ag.max.ms 参数,表示如果某个 Follower 的 LEO(latest endoffset)一直落后 Leader 超过了10秒,那么才会被从 ISR 列表里移除

这样的话,即使出现瞬间流量,导致 Follower 落后很多数据,但是只要在限定的时间内尽快追上来就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值