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

聊聊 Kafka 的 LEO 和 HW

半夏大师兄 2022-03-07
1206

LEO:Log End Offset

在 kafka 里面。无论 leader partition 还是 follower partition 统一都叫做副本 (replica)

每次 replica 接受到一条消息,都会更新自己的 LEO,也就是 log end offset,LEO 其实就是最新的 offset + 1


HW:High Water Mark

LEO 有一个很重要的功能就是更新 HW,HW 之前的数据对消费者是可见,消息属于 commit 状态。HW 之后的消息消费者消费不到


LEO 和 HW 更新流程


  1. producer 发送请求写数据
  2. leader partition 将数据写到磁盘。写完后更新 LEO 的值为:当前最新的 offset + 1
  3. follower partition 向 leader partition 拉取数据,同时带上自己的 LEO 值
  4. leader partition 收到 follower partition 发过来的 LEO 值后更新 ISR 列表 中 replica 的 LEO 值,同时判断是否要扩展维护的 ISR 列表
  5. leader partition HW 值可能会发生变化:取维护的 ISR 列表所有 replica 中 LEO 的最小值
  6. leader partition 将数据返回,同时带上当前的 HW 值
  7. follower partition 收到数据后将数据写到磁盘。写完后更新 LEO 的值为:当前最新的 offset + 1
  8. 更新 HW 值为:min(LEO, HW)。取 leader partition 返回的 HW 值和自己当前的 LEO 值的最小值


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

评论