Kafka HW&LEO概念入门

HW

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

在这里插入图片描述

LEO

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

例子

比如有个日志文件,有1个leader,2个follwer, 如下图,假设此时HWLEO都是3, 然后接下来生产者产生了新消息3和4

在这里插入图片描述
消息首先写入leader副本,之后写入follwer副本,

在这里插入图片描述
由于各种原因,follower拉取数据的速度是不同的,如下图,第一个副本LEO为5,而第二个副本LEO为4,那么当前分区的HW取最小值4,此时消费者可以消费到offset0至3之间的消息
在这里插入图片描述
当H第二个副本同步完成后,此时LEOHW都是5 ,因此消费者可以消费到offset为4的消息了。在这里插入图片描述

总结

  • HWLEO 实际都是一个offset
  • LEO 是日志文件待写入的下一条消息的offset
  • Kafka 消费者只能消费HW这个offset之前的消息

参考

kafka的partition 的高可用副本机制_小马哥的博客-CSDN博客

Kafka中的HW、LEO、LSO等分别代表什么?

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LEO(Log End Offset)是指副本底层log文件下一条要写入的消息的位移。例如,如果LEO=10,那么当前文件已经写入了10条消息,位移范围是[0,10)。HW(High Watermark)是指所有分区已提交的位移,通常HW<=LEO。 对于多副本情况下,各个副本HWLEO的演变过程如下:当Leader副本写入新的消息时,它会更新自己的LEO。Follower副本会从Leader副本拉取消息,并更新自己的LEO为Leader副本的LEO值加1。同时,Follower副本还会更新自己的HW。更新HW的算法是比较当前LEO和Leader副本传送过来的HW的值,然后取较小值作为自己的HW值。HW的更新会触发消费者端的位移提交和消息删除。 KafkaLEOHW分别代表副本底层log文件下一条要写入的消息的位移和所有分区已提交的位移。通过比较HW和消费者的位移,Kafka可以保证消息的顺序性。 关于分区器、序列化器和拦截器,分区器用于决定将消息发送到哪个分区,序列化器用于将消息对象序列化为字节流进行发送,拦截器则可以在消息发送前后进行一些处理。处理顺序是先经过拦截器,然后经过分区器和序列化器。 Kafka生产者客户端的整体结构包括一个或多个Producer线程、一个缓冲区、一个分区器、一个或多个拦截器和一个或多个序列化器。Producer线程负责将消息发送到Kafka集群的Broker,缓冲区用于缓存待发送的消息,分区器决定消息被发送到哪个分区,序列化器将消息对象序列化为字节流进行发送,拦截器可以在消息发送前后进行一些处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值