kafka中AR、ISR、OSR以及HW、LEO的区别

kafka中AR、ISR、OSR以及HW、LEO的关系

Kafka 为分区引入了多副本 (Replica) 机制, 通过增加副本数量可以提升容灾能力。同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样)
副本之间是 “一主多从”的关系,其中leader 副本负处理读写请求 ,follower 副本只负责与 leader 副本的消息同步。副本处于不同的 broker ,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 本对外提供服务。 Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker失效时仍然能保证服务可用

AR、ISR、OSR

在Kafka中,生产者和消费者只与leader 副本进行交互,而 follow 副本只负责消息的同步,很多时候 follower 副本中的消息相对 leader 副本而言会有一定的滞后。根据同步情况的不同,kafka将副本分为了以下几种集合:

  • AR ( Assigned Replicas ):分区中的所有副本统称为 AR

  • ISR(On-Sync Replicas)所有与 leader 副本保持一定程度同步的副本(包括 leader 副本在内〕组成 ISR

  • OSR (Out-of-Sync Replicas )与 leader 副本同步滞后过多的副本(不包 leader 副本)组成

AR = ISR + OSR,默认情况下,当leader副本发生故障时,只有ISR集合中的副本才有资格被选举为新的leader

在正常情况下, follower 副本都应该与 leader 副本保持一定程度的同步,即 AR=ISR,,OSR 集合为空。

ISR 与 OSR并不是固定的

  • leader 副本负责维护和跟踪 ISR 集合中所有 follower 的滞后状态, follower 副本落后太多或失效时, leader 副本会把它从 ISR 集合中剔除
  • 如果 OSR 集合中有 follower 副本 ”追上“ leader 副本,那么 leader 副本它从 OSR 集合转移至 ISR 集合

HW、LEO

另外,ISR 与 HWLEO 有着紧密的关系。

  • HW:HW是 High Watermark 的缩写,俗称高水位,它标识了一个特定的消息偏移量( offset ),消费者只能拉取到这个 offset 之前的消息。

    如下图所示,消费者只能消费0~5号偏移量的数据

在这里插入图片描述

  • LEO:LEO是 Log End Offset 缩写,它标识当前日志文件中下一条待写入消息 offset,如上图的日志中已经写了0~8号数据,那么offset为9的位置即为当前日志文件的LEO。

通过ISR、HW权衡数据可靠性和性能之间的关系

下面通过一个例子来具体感受一下这种 ISR 集合的:

假设现在某个分区的ISR中有3个副本,那么HW和LEO都为3(即只能消费3之前的消息),现在消息3和消息4从生产者发出后被存入leader副本

在这里插入图片描述

消息写入后,follower副本会拉取消息进行消息同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngfCRPTF-1660468449500)(D:\note\笔记仓库\图片\image-20220814170354438.png)]

在某个时刻,可能只有follower1同步成功,follower2只同步消息3还未同步消息4。那么此时的HW就为4,LEO就为5。此时消费者可以消费到offset为 0 至 3 之间的数据

在这里插入图片描述

所有副本同步成功后,HW和LEO都变为5,此时消费者就可以消费到 offset 为4的消息了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XTQL2z8-1660468449503)(D:\note\笔记仓库\图片\image-20220814170803251.png)]

总结:Kafka通过这种 ISR 的方式有效的权衡了数据可靠性和性能之间的关系

本文参考:《深入理解Kafka核心设计与实践原理》

猜你喜欢

转载自blog.csdn.net/qq_53578500/article/details/126333814
ISR