kafka中ARISROSR以及HWLEO的区别
Posted 以终为始001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka中ARISROSR以及HWLEO的区别相关的知识,希望对你有一定的参考价值。
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 与 HW 和 LEO 有着紧密的关系。
-
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副本会拉取消息进行消息同步
在某个时刻,可能只有follower1同步成功,follower2只同步消息3还未同步消息4。那么此时的HW就为4,LEO就为5。此时消费者可以消费到offset为 0 至 3 之间的数据
所有副本同步成功后,HW和LEO都变为5,此时消费者就可以消费到 offset 为4的消息了
总结:Kafka通过这种 ISR 的方式有效的权衡了数据可靠性和性能之间的关系。
本文参考:《深入理解Kafka核心设计与实践原理》
Kafka 中 ARISROSR 是什么?ISR 的伸缩性什么?
相信大家已经对 kafka
的基本概念已经有一定的了解了,下面直接来分析一下 ISR 和 AR 的概念。
一、ISR and AR
简单来说,分区中的所有副本统称为 AR
(Assigned Replicas)。所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成 ISR
(In Sync Replicas)。 ISR 集合是 AR 集合的一个子集。消息会先发送到leader副本,然后follower副本才能从leader中拉取消息进行同步。同步期间,follow副本相对于leader副本而言会有一定程度的滞后。前面所说的 ”一定程度同步“ 是指可忍受的滞后范围,这个范围可以通过参数进行配置。于leader副本同步滞后过多的副本(不包括leader副本)将组成 OSR
(Out-of-Sync Replied)由此可见,AR = ISR + OSR。正常情况下,所有的follower副本都应该与leader 副本保持 一定程度的同步,即AR=ISR,OSR集合为空。
二、ISR 的伸缩性
leader副本负责维护和跟踪 ISR
集合中所有follower副本的滞后状态,当follower副本落后太多或失效时,leader副本会把它从 ISR 集合中剔除。如果 OSR
集合中所有follower副本“追上”了leader副本,那么leader副本会把它从 OSR 集合转移至 ISR 集合。默认情况下,当leader副本发生故障时,只有在 ISR 集合中的follower副本才有资格被选举为新的leader,而在 OSR 集合中的副本则没有任何机会(不过这个可以通过配置来改变)。
以上是关于kafka中ARISROSR以及HWLEO的区别的主要内容,如果未能解决你的问题,请参考以下文章
Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考