👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人
Java知识图谱点击链接:体系化学习Java(Java面试专题)
💕💕 感兴趣的同学可以收藏关注下 ,不然下次找不到哟💕💕
✊✊ 感觉对你有帮助的朋友,可以给博主一个三连,非常感谢 🙏🙏🙏
1、什么是 AR、ISR、OSR
AR(Assigned Replicas) 是指为每个分区分配的副本集合。在Kafka中,每个分区可以有多个副本,其中一个副本被选举为leader,其他副本为follower。AR是指包括leader副本在内的所有副本的集合。
ISR(In-Sync Replicas) 是指与leader副本保持同步的follower副本集合。只有处于ISR中的副本才会被认为是同步的,其他副本将被视为不可靠的。当follower副本无法及时跟上leader副本的同步进度时,它将被移出ISR,直到它能够追赶上来。ISR机制确保了数据的一致性和可靠性。
OSR(Out-of-Sync Replicas) 是指与leader副本不同步的follower副本集合。当follower副本无法及时跟上leader副本的同步进度时,它将被移出ISR,并被标记为OSR。OSR副本将尝试追赶上来,一旦追赶上来并与leader副本保持同步,它将被重新添加到ISR中。
这些概念在Kafka中用于管理副本的分配和同步,以确保数据的可靠性和一致性。
2、ISR 的伸缩性
ISR(In-Sync Replicas,同步副本) 的伸缩性是指ISR的能力适应负载变化和副本增减的能力。ISR的伸缩性对于Kafka集群的性能和可靠性非常重要。
当Kafka集群的负载增加或减少时,ISR的伸缩性可以通过以下方式来实现:
-
副本增加:当负载增加时,可以通过增加follower副本来提高ISR的伸缩性。新的follower副本将追赶上leader副本的同步进度,并加入ISR,从而分担负载。
-
副本减少:当负载减少时,可以通过减少follower副本来提高ISR的伸缩性。不再需要的follower副本将被移出ISR,并停止与leader副本的同步,从而减轻负载。
通过动态调整ISR的大小,Kafka可以根据负载的变化来自动平衡数据分布和副本同步,以提供更好的性能和可靠性。ISR的伸缩性是Kafka集群能够处理大规模数据流的关键因素之一。
3、AR = ISR + OSR ?
对于Kafka中的副本集合,有一个简单的关系可以描述为:AR(Assigned Replicas,分配副本)等于ISR(In-Sync Replicas,同步副本)加上OSR(Out-of-Sync Replicas,不同步副本)。
具体来说,AR是指为每个分区分配的副本集合,包括leader副本和follower副本。ISR是与leader副本保持同步的follower副本集合,即可靠的副本。OSR是与leader副本不同步的follower副本集合,即不可靠的副本。
因此,AR可以被分解为ISR和OSR的组合。ISR中的副本用于保证数据的一致性和可靠性,而OSR中的副本则需要追赶上来并与leader副本保持同步,才能重新加入ISR。
4、数据写入及同步的过程
整个数据写入及同步的过程分为九个步骤:
-
leader 副本将数据写入本地磁盘
-
leader 副本更新 LEO
-
follower 副本发送同步数据请求,携带自身的 LEO
-
leader 副本更新本地保存的其它副本的 LEO
-
leader 副本尝试更新 ISR 列表
-
leader 副本更新 HW
-
leader 副本给 follower 副本返回数据,携带 leader 副本的 HW 值
-
follower 副本接收响应并写入数据,更新自身 LEO
-
follower 副本更新本地的 HW 值
4、HW 和 LEO
HW(High Watermark)表示Kafka分区中已经被确认的最高偏移量。它代表了消费者可以安全地读取的消息位置。消费者只能消费高于HW的消息,确保消息的可靠性。
LEO(Log End Offset)表示Kafka分区中当前的最高偏移量。它代表了分区中最新的消息位置,包括已经写入但尚未被确认的消息。LEO是一个动态的值,随着消息的写入和确认而变化。
HW和LEO在Kafka中用于管理消息的可靠性和一致性。消费者可以通过比较HW和LEO来确定自己的消费进度,并确保不会丢失任何重要的消息。
5、写在最后总结
AR(Assigned Replicas,分配副本)、ISR(In-Sync Replicas,同步副本)、OSR(Out-of-Sync Replicas,不同步副本)、HW(High Watermark,高水位标记)和LEO(Log End Offset,日志结束偏移量),如下:
-
AR是指为每个分区分配的副本集合,包括leader副本和follower副本。每个分区可以有多个副本,其中一个副本被选举为leader,其他副本为follower。
-
ISR是指与leader副本保持同步的follower副本集合。只有处于ISR中的副本才会被认为是同步的,其他副本将被视为不可靠的。ISR中的副本会按照leader副本的进度来进行数据复制和同步。
-
OSR是指与leader副本不同步的follower副本集合。当follower副本无法及时跟上leader副本的同步进度时,它将被移出ISR,并被标记为OSR。OSR副本将尝试追赶上来,一旦追赶上来并与leader副本保持同步,它将被重新添加到ISR中。
-
HW(High Watermark)是指已经被确认的最高偏移量,代表了消费者可以安全地读取的消息位置。消费者只能消费高于HW的消息,确保消息的可靠性。
-
LEO(Log End Offset)是指当前分区中最新的消息位置,包括已经写入但尚未被确认的消息。LEO是一个动态的值,随着消息的写入和确认而变化。
综上所述,AR是包括leader和follower副本的集合,ISR是与leader副本保持同步的follower副本集合,OSR是与leader副本不同步的follower副本集合。HW代表了消费者可以安全读取的消息位置,LEO代表了当前分区中最新的消息位置。这些概念在Kafka中用于管理副本的同步和消息的可靠性。
💕💕 本文由激流原创,原创不易,希望大家关注、点赞、收藏,给博主一点鼓励,感谢!!!
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃