kafka acks=-1时,关于HW,LEO的疑问

浮游的蜉蝣 发表于: 2020-06-15   最后更新时间: 2020-06-16  

求大神讲解,在设置acks=-1后。是否应当leader的HW,LEO值将会永远一致才对。

另外,有没有可以查看当前HW,LEO值的方法,或者其他判断follower追赶leader进度的方法也行。网上查了半天没查到,有说看replication-offset-checkpoint文件值是否一样,但是实际看着也不太对。



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: 删除kafka数据目录
下一条: 为什么kafka开启事务后生产出来的位移offset始终间隔为2,关闭事务后就正常

  • 首先LEO是消费者看不到的,ack=-1只是leader确认接收到消息会返回响应,但是replica还是会同步数据,所以leader的LEO和HW不一样(除非你没有replica)。HW是可以通过jmx监控指标看到的,指标名:kafka.log:type=Log,name=LogEndOffset,topic=xxxxx,partition=10,这个指标名看起来是LEO但是实际上是HW。jmx还有一个指标kafka.server:type=FetcherLagMetrics,name=ConsumerLag,clientId=ReplicaFetcherThread-0-19,topic=xxxxxx,partition=29 这个可以看到每个分区的一个追赶lag

    kafka 0.11之前副本机制主要依赖hw的概念,而0.11后采用了leader epoch来标识进度,内容太长了,给你个连接吧:
    https://www.cnblogs.com/huxi2b/p/7453543.html

    • 你提供的链接已拜读,已经对LEO和HW的更新机制有了基本了解。但还是有点疑问,就是ack=-1的解释是producer只有收到分区内所有副本的成功写入的通知才认为成功,这里的所有副本“成功写入”指的是follow的LEO更新成功的时机么,还是leader的remote LEO更新成功,还是什么?
      原提问的第二个问题大神有指导么,有没有可以查看当前HW,LEO值的方法呢。我之前搜到一个帖子说查看replication-offset-checkpoint中的值就是HW,但是我在实际环境中看,follower的这个文件值有大于leader的情况,搞得我也不清楚这个是否正确。