上一篇:浅谈Kafka High Watermark

概述

为了解决只使用高水位而导致数据丢失或数据不一致的问题,Kafka 引入了Leader Epoch。

Leader Epoch,可以认为是 Leader 版本。它由两部分数据组成<Epoch, Start Offset>

  1. Epoch。一个单调增加的版本号。每当副本领导权发生变更时,都会增加该版本号。小版本号的 Leader 被认为是过期 Leader,不能再行使 Leader 权力。
  2. 起始位移(Start Offset)。Leader 副本在该 Epoch 值上写入的首条消息的位移。

Broker 会在内存中为每个分区都缓存 Leader Epoch 数据,同时它还会定期地将这些信息持久化到一个 checkpoint 文件中。当 Leader 副本写入消息到磁盘时,Broker 会尝试更新这部分缓存。如果该 Leader 是首次写入消息,那么 Broker 会向缓存中增加一个 Leader Epoch 条目,否则就不做更新。这样,每次有 Leader 变更时,新的 Leader 副本会查询这部分缓存,取出对应的 Leader Epoch 的起始位移,以避免数据丢失和不一致的情况。

具体流程

  1. 前面的步骤都一样,只不过当 Follower 副本 B 重启回来后,需要向 A 发送一个特殊的请求去获取 Leader 的 LEO 值 → 2。当获知到 Leader LEO=2 后,B 发现该 LEO 值 ≥ 自己的 LEO 值小,而且缓存中也没有保存任何Start Offset > 2 的 Epoch 条目,因此 B 无需执行任何日志截断操作。这是对高水位机制的一个明显改进,即副本是否执行日志截断不再依赖于高水位进行判断
  2. 此时 A 宕机了,B 成为 Leader。当 A 重启回来后,执行与 B 相同的逻辑判断,发现也不用执行日志截断,至此位移值为 1 的那条消息在两个副本中均得到保留。后面当生产者程序向 B 写入新消息时,副本 B 所在的 Broker 缓存中,会生成新的 Leader Epoch 条目:[Epoch=1, Offset=2]。之后,副本 B 会使用这个条目帮助判断后续是否执行日志截断操作。

参考自胡夕老师《Kafka核心技术与实战》极客时间专栏,老师的课很棒,强烈推荐!

浅谈 Kafka Leader Epoch相关推荐

  1. 【kafka】浅谈Kafka的多线程消费的设计

    1.概述 转载:浅谈Kafka的多线程消费的设计 看原文去... 一.前言 跟RabbitMQ相比,Kafka的分区机制(Partition)使其支持对同一个"队列"分片并行读取, ...

  2. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  3. 浅谈Kafka选举机制

    Kafka是一个高性能,高容错,多副本,可复制的分布式消息系统.在整个系统中,涉及到多处选举机制,被不少人搞混,这里总结一下,本篇文章大概会从三个方面来讲解. 控制器(Broker)选主 分区多副本选 ...

  4. 浅谈kafka之partition

    partition(分区)是kafka的一个核心概念,kafka将1个topic分成了一个或多个分区,每个分区在物理上对应一个目录,分区目录下存储的是该分区的日志段(segment),包括日志的数据文 ...

  5. 浅谈Kafka消息压缩

    概述 Kafka目前支持GZIP.Snappy.LZ4.zstd.不压缩这几种压缩算法.在开启压缩时,Kafka会选择一个batch的消息一起压缩,这样的一批消息就是一个压缩分段,我们也可以通过参数来 ...

  6. Kafka可靠性之HW与Leader Epoch

    <深入理解Kafka:核心设计与实现原理>是基于2.0.0版本的书 在这本书中,终于看懂了笔者之前提过的几个问题 准备知识 1.leader里存着4个数据:leader_LEO.leade ...

  7. Kafka(Go)教程(十二)---Kafka 中的高水位和 Leader Epoch 机制

    来自:指月 https://www.lixueduan.com 原文:https://www.lixueduan.com/post/kafka/12-hw-leader-epoch/ 本文解释了 Ka ...

  8. 浅谈大数据中的 2PC、3PC、Paxos、Raft、ZAB

    一致性 简述 一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的.假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性: 全认同: 所有N个节点都认同一个 ...

  9. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  10. AI 云原生浅谈:好未来 AI 中台实践

    简介:好未来通过阿里云云原生架构实现了对资源的灵活调度,阿里云为其 AI 中台奠定了敏捷而坚实的技术底座. 作者 | 刘东东 来源 | 凌云时刻(微信号:linuxpk) 前言 AI 时代的到来,给企 ...

最新文章

  1. 是时候了解下无监督学习了!
  2. 入门学习webpack笔记
  3. 自己动手实现一个简单的JSON解析器
  4. VTK:Utilities之KnownLengthArray
  5. html对话框跳转页面,html页面的简单对话框(alert, confirm, prompt)
  6. zabbix之 qq邮件报警
  7. 蓝桥杯2019年第十届C/C++省赛A组第四题-迷宫
  8. uniapp开发原生android插件,获取浏览器cookie
  9. mysql定时导出数据_mysql定时备份数据
  10. H5抽奖小游戏万圣节抓南瓜
  11. 万年历—Java计算感恩节是哪天?感恩节是哪一天?2017年感恩节是哪一天?
  12. 针对Android平台播放器开源库NiceVieoPlayer倍速的开发
  13. 最全的硬盘问题及修复方法
  14. C++后台开发学习路线(已多人拿下腾讯后台开发)
  15. 爬虫实现中英文的词语和句子互译
  16. 20154312 曾林 EXP6 信息搜集与漏洞扫描
  17. SQL server management studio 使用
  18. php curl curlopt_customrequest,php – 如何重置CURLOPT_CUSTOMREQUEST
  19. solo 电路 耳放_Graham Slee SOLO 耳机放大器发展史
  20. PHP简介和基础案例

热门文章

  1. pandas入门与数据准备与简单筛选统计
  2. 【高数】【本科笔记】【第七章 微分方程】【7.2 可分离变量的微分方程】
  3. 精确字符串匹配(Zbox算法)
  4. 聆听天籁女声大碟《天碟落地》
  5. 任正非:一个人对自己都不狠,哪来的战斗力?
  6. R语言中创建股票走势图
  7. javafx 五、网络请求
  8. 新型传感器将改变大脑控制的机器人技术
  9. free(): invalid next size (fast): 0x000000xxx
  10. 远程桌面连接只有2个会话活动