暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka 分区 HW 和 LEO是什么?它们的关系是怎么样的?

大数据技能圈 2025-02-11
63

01

HW和LEO的概念

今天,咱们看看Kafka 分区中 HW和LEO的关系
HW(High Watermark,高水位)是个很重要的概念。它就像水库的水位线,标识了一个特定的消息偏移量(offset)。消费者只能拉取到这个offset之前的消息,就好像水库的水只能抽到水位线以下。
LEO(Log End Offset)是日志文件的末尾偏移量,表示下一条待写入的消息的位置。比如,一个日志文件里有9条消息,第一条消息的offset是0,最后一条消息的offset是8,下一条待写入的消息offset是9。如果HW是6,那就意味着消费者只能拉取到offset在0到5之间的消息,offset为6的消息对消费者来说是“不可见的”。
如图所示,它代表一个日志文件,这个日志文件中有 9 条消息,第一条消息的offset(LogStartOffset)为0,最后一条消息的offset为8,offset为9的消息用虚线框表示,代表下一条待写入的消息。日志文件的HW为6,表示消费者只能拉取到offset在0至5之间的消息,而offset为6的消息对消费者而言是不可见的。

LEO是Log End Offset的缩写,它标识当前日志文件中下一条待写入消息的offset,图1-4中offset为9的位置即为当前日志文件的LEO,LEO的大小相当于当前日志分区中最后一条消息的offset值加1。分区ISR集合中的每个副本都会维护自身的LEO,而ISR集合中最小的LEO即为分区的HW,对消费者而言只能消费HW之前的消息。

为了更好地理解ISR集合,以及HW和LEO之间的关系,下面通过一个简单的示例来进行相关的说明。如图1所示,假设某个分区的ISR集合中有3个副本,即一个leader副本和2个follower副本,此时分区的LEO和HW都为3。消息3和消息4从生产者发出之后会被先存入leader副本,如图2所示。

在消息写入leader副本之后,follower副本会发送拉取请求来拉取消息3和消息4以进行消息同步。在同步过程中,不同的 follower 副本的同步效率也不尽相同。如图 3 所示,在某一时刻follower1完全跟上了leader副本而follower2只同步了消息3,如此leader副本的LEO为5,follower1的LEO为5,follower2的LEO为4,那么当前分区的HW取最小值4,此时消费者可以消费到offset为0至3之间的消息。
写入消息如 图4 所示,所有的副本都成功写入了消息3和消息4,整个分区的HW和LEO都变为5,因此消费者可以消费到offset为4的消息了。

02

说在最后:有问题找苦获取经

筹划已久的大数据系列组件视频正式开始录制了,后续会持续发布出来,本次系列视频包含但不限于Kafka、Doris、Seatunnel、Dolphinscheduler、StarRocks、Iceberg、Flink、Spark、Hudi、Paimon、Fluss、FlinkCDC、Dinky、StreamPark、实时数仓/数据湖建设、离线数仓建设等。预计持续更新时间9个月。
详情请访问:说大事!大数据系列组件视频正式开始录制发布!
本系列视频由苦获独立完成,保证了课程系列的连贯性,文档、配套代码及视频都已发布在知识星球,详情可添加苦获咨询。
kafka架构请访问:Kafka架构是怎么样的?如何保证数据不丢失?
kafka安装请访问:建议收藏 | Docker+Jdk8+Zookeeper+Kafka+UI for Kafka 一条龙安装详细教程

03

加群请添加作者

04

获取文档代码资料

推荐阅读系列文章

如果喜欢 请点个在看分享给身边的朋友


文章转载自大数据技能圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论