引用:HW与Epoch的讨论

HW存在的意义:(为了保持副本间可消费数据一致的标记)

保证多个副本之间的数据一致,否则因为同步的延迟的问题会出现多个副本间数据不一致的问题。

如果Leader重新选举,对于消费者来说还会出现跳跃消费数据,丢失数据的情况
保证当出现Leader切换后,能够消费的数据一致

HW存在的基础:

LEO 日志末端位移,表示日志末端下一条数据的位移,如果它的值为10那么分区中存在0~9 10条数据,下一条的位移量是10

怎么样更新HW

简单的说:取LEO的最小值,就是保证所有的副本的可消费数据一致

  • Leader端:取Leader端和Follower端的Leo的集合的最小值
  • Follower端:取Leader端返回给Follower端的HW的

HW 在消息写入过程中的变化

1.首先数据写入Leader

2.然后更新Leader的LEO

3.Follower向Leader同步数据,fetch 请求携带Follower的Offset

4.Leader更新Follower的LEO

5.尝试更新ISR

6.尝试更新自己的HW,min(ISR的所有LEO,包含自己的)

7.返回数据给Follower并带上Leader的HW

8.Follower更新自己的LEO

9.将Leader的HW和自己的LEO取最小值作为自己的HW

以上重要概念

Follower的Leo是存了两份的一份在Leader上,一份在自己的副本这里

何时更新Follower 的LEO

  • Leader上的Follower上的LEO在Follower拉取数据请求发送给Leader后,这时数据还没有给Follower
  • Follower自己的LEO,在拉取数据成功写入后

何时更新Leader的LEO

  • Leader写入数据的时候

何时尝试更新Leader的HW

在Leader收到Follower的同步数据请求后,并更新Follower的LEO后,在发送数据给Follower之前

何时更新Follower的HW

Follower写入数据,更新LEO后

在Leader端更新HW过程中,选取副本LEO条件(满足之一即可)

  • 处于ISR中
  • 消息同步延迟replica.lag.time.max.ms参数值(默认是10s)

看似这两是一个条件实则不然,如果一台机器首先是追赶上Leader,这时候它宕机了,然后在10s内Leader写入数据,如果只判断第一条。那么这台宕机的副本的LEO将不会选中,那么当这台机器回来后分区HW就越过了这个副本的LEO。

此时之前的Leader挂了,回来的Follower还没有同步数据。如果这台机器成为了Leader就会造成数据丢失的问题。

以上这套机制存在什么问题

以下情况均建立在Kafka的最小Leader选举ISR数为1的情况

min.insync.replicas=1

副本超过一个,再加上Leader本身,总共有三个副本,那么是不太会出现以下情况。

  • 还是存在数据丢失的可能

    由于消息的的同步是延迟一轮的,所以有可能会出现以下场景:

    1.Follower还没有更新HW,挂掉了

    2.重启后,Leader也挂掉了,原来的Follower成为了新的Leader,它自己保持原来的HW,并且自动将LEO的值拉回了HW的值,这里很重要涉及到后面的解决方案

    2.当原来的Leader加入变成Follower后,发现自己的HW比现在的Leader的高,然后做了日志截断

  • 数据不一致

    HW虽然一致,但是实际两个副本间的数据实际内容不一致了

    1.首先Follower的同步此时延迟Leader一轮

    2.两台机器都挂了,重启后由于网络的原因原来的Follower的先在Zookeeper建立了节点成为了新的Leader.

    3.这时候新的Leader写入数据

    4.然后原来的Leader重启后成为Follower,发现HW与新的Leader是一致,不需要变化

    但其实这时候,两个副本HW是一致,但是最后一条数据实际内容是不一致的。

    5.对于消费者来说,其实也是数据丢失了

Kafka是怎么规避上面的问题

在Leader端保存一条<epoch,offset>,表示《版本号,写入第一条消息的位移》,版本号只要重新选举一次就+1。

第一种情况:(数据同步了,HW未更新)

第二种情况:(数据还没有同步,HW未更新)


这样解决了数据的不一致问题,但其实我认为对于消费者来说还是丢失了数据的。

Kafka HW及Epoch相关推荐

  1. kafka HW机制的作用

    1.如果没有该机制,消费端从leader副本poll了一批消息消费之后,leader副本挂机了,之后从ISR选举出的副本中的消息可能是比leader少了的.如果此时consumer处理完这批数据提交o ...

  2. Kafka可靠性分析

    消息中间件是为了应用间的解偶,削峰等,所以我们需要保证消息的可靠.那么如何保证消息的可靠性呢? 正常情况下的可靠性分析 kafka的整体流程基本可以分为:1.生产者生产消息,2.消费者消费成功.消息只 ...

  3. Kafka生产环境缩容遇到的一个坑

    1.背景 最近在折腾Kafka日志集群,由于公司部署的应用不断增加,日志采集程序将采集到的日志发送到Kafka集群时出现了较大延迟,总的TPS始终上不去,为了不影响业务团队通过日志排查问题,采取了先解 ...

  4. kafka之消息格式

    kafka之消息格式 - 爱码网文章目录Kafka版本消息格式V0版本V1版本Message SetV0与V1的缺陷V2版本Kafka版本kafka版本1.1.1,可能绝大部分也适用于kafka 0. ...

  5. 堪称货拉拉混合云数据库建设史,一场DBA团队的逆袭之战

    本文根据蔡鹏老师在[2021 Gdevops全球敏捷运维峰会-广州站]现场演讲内容整理而成. (点击文末"阅读原文"可获取完整PPT) 讲师介绍 蔡鹏,前饿了么,蚂蚁金服技术专家, ...

  6. 进阶大数据架构师学习路线

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/25b820fe1d054f53bab70310694faffe.jpeg#pic_center 文末有惊喜 大数据架 ...

  7. 社招两年半 10 个公司 28 轮面试面经(含字节、拼多多、美团、滴滴......)

    个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链....等公司的 offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然, ...

  8. 社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)

    个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链-的offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然,平时也可以看一 ...

  9. 大牛deep learning集合

    作者1:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 作者1:denghp83 出处:http://blog.csdn.net/denghp83/ ...

最新文章

  1. 从实体类get方法拿不到值,可能是字段带_的原因
  2. gorm 密码字段隐藏_非常专业且免费的密码管理工具
  3. 4.3 欠拟合与过拟合
  4. 图卷积网络初探【GCN】
  5. mongodb(2) 1
  6. Harris角点检测算法优化
  7. 《自拍教程20》ffmpeg 音视频图像转码工具
  8. Oracle数据库打补丁注意事项
  9. 企业LNMP环境应用
  10. 云计算与分布式技术-常见云的比较
  11. 标题:缩位求和 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248 * 15 = 3720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得 2
  12. php rsa 模数 指数,密码:使用模数和指数生成RSA私钥
  13. android美食app设计图,基于位置的Android美食地图应用的设计与实现
  14. 国庆福利赠书,书籍全部包邮送!
  15. Raspberry - 解决中兴(ZTE)摄像头无法使用密码访问树莓派上的samba共享(NAS)
  16. 弄懂 JavaScript 执行机制,宏任务和微任务
  17. 如何用python的turtle画五角星_海龟编辑器五角星怎么画 绘制五角星就是这么简单...
  18. 手持弹幕android制作,手持弹幕神器
  19. 设计,看上去很美 wayfarer
  20. 范美忠的逃生本能需要一种理性伪饰吗?

热门文章

  1. 机械结构day_13
  2. 基于5G城市道路积水监测系统解决方案
  3. 直播预告 | NeurIPS 专场一 青年科学家专场
  4. 编写程序描述影视歌三栖艺人
  5. Win10+YOLOv5运行记录
  6. 思维模型 5W2H分析法
  7. 计量经济学及Stata应用 陈强 第七章异方差习题7.3
  8. NAACL最佳方法论文:课本上的A*搜索算法可以提升文本生成效果!
  9. 深信服服务器 重装系统,sangfor云服务器更换系统
  10. 我的世界java地狱更新_【我的世界】我得世界:1.16地狱大年夜更新_玩得好游戏攻略...