Kafka中AR、ISR、OSR、HW、LEO之间关系

先看几个名词的概念。

ISR:所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成 ISR (In Sync Replicas)。 ISR 集合是 AR 集合的一个子集。

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

OSR:leader副本同步滞后过多的副本(不包括leader副本)将组成 OSR (Out-of-Sync Replied)

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

LEO:标识当前日志文件中下一条待写入的消息的offset。上图中offset为9的位置即为当前日志文件的 LEO,LEO 的大小相当于当前日志分区中最后一条消息的offset值加1.

ISR、AR与OSR之间关系

AR = ISR + OSR

ISR、HW与LEO之间关系

从上面的定义上看LEO,不难得出结论为 每个partition都有自己的LEO,且可能出现不同partition之间的LEO值有所不同

HW是整个 topic 级别来看待,生产者的写操作都是通过 partition 的 Leader 节点进行的。partition 的 follower 的定期同步 leader 节点的数据。既然是定期,那么必然就存在数据不一致的问题。HW就是来处理这个问题的。

举例说明:
假设某分区的 ISR 集合中有 3 个副本,即一个 leader 副本和 2 个 follower 副本,此时分区的 LEO 和 HW 都分别为 3 。消息3和消息4从生产者出发之后先被存入leader副本。

在消息被写入leader副本之后,follower副本会发送拉取请求来拉取消息3和消息4进行消息同步。

在同步过程中不同的副本同步的效率不尽相同,在某一时刻follower1完全跟上了leader副本而follower2只同步了消息3,如此leader副本的LEO为5,follower1的LEO为5,follower2的LEO 为4,那么当前分区的HW取最小值4,此时消费者可以消费到offset0至3之间的消息。

当所有副本都成功写入消息3和消息4之后,整个分区的HW和LEO都变为5,因此消费者可以消费到offset为4的消息了。

由此可见kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制。事实上,同步复制要求所有能工作的follower副本都复制完,这条消息才会被确认已成功提交,这种复制方式极大的影响了性能。而在异步复制的方式下,follower副本异步的从leader副本中复制数据,数据只要被leader副本写入就会被认为已经成功提交。在这种情况下,如果follower副本都还没有复制完而落后于leader副本,然后leader副本宕机,则会造成数据丢失。kafka使用这种ISR的方式有效的权衡了数据可靠性和性能之间的关系。

posted @   jiaxzeng  阅读(700)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示