Kafka HW及Epoch
引用: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相关推荐
- kafka HW机制的作用
1.如果没有该机制,消费端从leader副本poll了一批消息消费之后,leader副本挂机了,之后从ISR选举出的副本中的消息可能是比leader少了的.如果此时consumer处理完这批数据提交o ...
- Kafka可靠性分析
消息中间件是为了应用间的解偶,削峰等,所以我们需要保证消息的可靠.那么如何保证消息的可靠性呢? 正常情况下的可靠性分析 kafka的整体流程基本可以分为:1.生产者生产消息,2.消费者消费成功.消息只 ...
- Kafka生产环境缩容遇到的一个坑
1.背景 最近在折腾Kafka日志集群,由于公司部署的应用不断增加,日志采集程序将采集到的日志发送到Kafka集群时出现了较大延迟,总的TPS始终上不去,为了不影响业务团队通过日志排查问题,采取了先解 ...
- kafka之消息格式
kafka之消息格式 - 爱码网文章目录Kafka版本消息格式V0版本V1版本Message SetV0与V1的缺陷V2版本Kafka版本kafka版本1.1.1,可能绝大部分也适用于kafka 0. ...
- 堪称货拉拉混合云数据库建设史,一场DBA团队的逆袭之战
本文根据蔡鹏老师在[2021 Gdevops全球敏捷运维峰会-广州站]现场演讲内容整理而成. (点击文末"阅读原文"可获取完整PPT) 讲师介绍 蔡鹏,前饿了么,蚂蚁金服技术专家, ...
- 进阶大数据架构师学习路线
![在这里插入图片描述](https://img-blog.csdnimg.cn/25b820fe1d054f53bab70310694faffe.jpeg#pic_center 文末有惊喜 大数据架 ...
- 社招两年半 10 个公司 28 轮面试面经(含字节、拼多多、美团、滴滴......)
个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链....等公司的 offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然, ...
- 社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)
个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链-的offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然,平时也可以看一 ...
- 大牛deep learning集合
作者1:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 作者1:denghp83 出处:http://blog.csdn.net/denghp83/ ...
最新文章
- 从实体类get方法拿不到值,可能是字段带_的原因
- gorm 密码字段隐藏_非常专业且免费的密码管理工具
- 4.3 欠拟合与过拟合
- 图卷积网络初探【GCN】
- mongodb(2) 1
- Harris角点检测算法优化
- 《自拍教程20》ffmpeg 音视频图像转码工具
- Oracle数据库打补丁注意事项
- 企业LNMP环境应用
- 云计算与分布式技术-常见云的比较
- 标题:缩位求和 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248 * 15 = 3720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得 2
- php rsa 模数 指数,密码:使用模数和指数生成RSA私钥
- android美食app设计图,基于位置的Android美食地图应用的设计与实现
- 国庆福利赠书,书籍全部包邮送!
- Raspberry - 解决中兴(ZTE)摄像头无法使用密码访问树莓派上的samba共享(NAS)
- 弄懂 JavaScript 执行机制,宏任务和微任务
- 如何用python的turtle画五角星_海龟编辑器五角星怎么画 绘制五角星就是这么简单...
- 手持弹幕android制作,手持弹幕神器
- 设计,看上去很美 wayfarer
- 范美忠的逃生本能需要一种理性伪饰吗?
热门文章
- 机械结构day_13
- 基于5G城市道路积水监测系统解决方案
- 直播预告 | NeurIPS 专场一 青年科学家专场
- 编写程序描述影视歌三栖艺人
- Win10+YOLOv5运行记录
- 思维模型 5W2H分析法
- 计量经济学及Stata应用 陈强 第七章异方差习题7.3
- NAACL最佳方法论文:课本上的A*搜索算法可以提升文本生成效果!
- 深信服服务器 重装系统,sangfor云服务器更换系统
- 我的世界java地狱更新_【我的世界】我得世界:1.16地狱大年夜更新_玩得好游戏攻略...