​目录

1、kafka霸道性能之揭开日志底层存储的面纱

2、HW?LEO?你俩一起搞事情?

3、ISR机制底层如何设计?

这是2020年的第一篇文章,新的开始,与君共勉。前文小白简单的去剖析了肌霸先生kafka的一些肌肉群,但是呢,只是远远地看了几眼,今天我们将深层次的从ISR机制,HW,高水位,LEO,日志存储等绕来绕去的名词去真正的靠近肌肉,大饱眼福,撕开Kafka的外衣,文明看肉,肌肉的肉。上文【舔一舔 · 肌霸Kafka】,也欢迎一起去回味一下。文中若有错误之处,欢迎大家留言讨论,谢谢大家。

1、kafka读写霸道性能之揭开日志底层存储的面纱

回顾上文我们知道,Kafka利用操作系统的Page Cache加上磁盘顺序写的机制,将自己的读写能力提升到了极致,高吞吐,低延迟。前文也简单的介绍了partition,日志,kafka的消息格式等,那么这里我们就来看看kafka的日志到底怎样的模样,有什么玄妙?

kafka上创建的一个topic都对应着多个partition,我们假设下topic的命名是orderPush,并且该topic有3个partition,每个partition有三个副本。

kafka有个配置参数log.dirs,所有的数据就是写入到这个目录下面,并且partition这样命名的,orderPush-0,orderPush-1,orderPush-2,分别对应着一个目录。每个目录中都很多个分段文件segment,写入文件会按照顺序写的规则去写入例如 00000000000000000000.log,默认大小为1G,就像我们平时用的logback文件一样,一旦写满,就自动滚动到下一个文件。

记住:kafka永远是顺序写入,文件结尾追加写

每一个log文件都对应俩个索引文件,一个是位移索引,后缀为.index,0.8版本之后又加入了时间戳索引,后缀为.timeindex,通过索引文件都能够快速地定位到消息。kafak为了节省索引的空间,采取了稀疏索引的策略,参数log.index.interval.bytes定义了log文件每写入多少字节,就会写入一条索引。

读取消息时,采用二分查找法定位到对应的索引,然后根据物理地址和物理位置去定位消息。

02 HW?LEO?你俩一起搞事情?

还记得之前我们讨论过的【舔一舔 · 肌霸Kafka】,kafka通过ISR机制来保证数据的高可用,不丢失,in sync replicas。我们接着讨论的是俩个看起来很酷(hui)炫(se)炸(nan)天(dong)的几个offset,这几个名词都和kafka写入日志紧紧相关,可以说我们理解了他们,才是真正的开始去理解kafka的写入,高可用机制,ISR机制如何运转。

offset,这个很好理解,这个就是每次写入的消息的下标,和数组一样,第一条数据,0,1,2以此类推。

LEO,log end offset,日志写完最后一个下标,这个理解起来也不难,就是说你当前写入的下标为0,那么LEO=offset+1,也就是下一个即将要写入的位置。

HW offset,这是啥?high water offset ,高水位,这是一个比较重要的概念,简单来说当我们一个topic有多个partition,只有当所有follower partition的LEO和leader partition的LEO相等的时候,HW才会发生变化,他代表的是当前已经提交的数据,HW和LEO之间的数据消费者是看不到的。

leader partition和follower partition都有LEO和HW。LEO的变化影响了HW,本质上LEO的一个作用就是为了更新HW。

我们需要去理解和掌握上的就是这几个offset是如何变化的。

leader partition offset的更新就是每次写入数据,offset+1

follower partition找leader来同步数据,leader partition每次将数据推送给follower partition

leader会维护一个follower partition的LEO值的列表,包含所有Follower partition的LEO值

每次leader partition 将数据推送给出follower partition,follower partition写入数据,follower partition的LEO+1

通过每次follower partition Fetch数据带上自己的LEO,leader可以更新follower partition的LEO值列表

每次follower partition过来拉取数据的时候,leader更新完LEO值列表,就会比对一下列表中所有的follower partition的LEO值是否和自己的LEO一致,如果一致,就会推进HW+1

每次返回给follower partition的数据也会带上HW,follower partition就会更新HW值,如果Leader partition的HW大于自己的LEO,follower partition HW=自己的LEO,如果如果Leader partition的HW小于自己的LEO,follower partition HW=leader partition HW,总之,二者取其小。

由此说来,LEO的更新和同步一致才是HW变化的前提。由于是follower partition每次过来同步数据,所以,HW最少都要俩次才会发生变化。

03 ISR机制底层如何设计

ISR机制是保证数据写入不丢失高可用的核心机制,Kafka是如何为leader Partition维护ISR列表的呢?什么样的follower partition才有资格放入ISR列表中呢?

老版本的Kafka配置文件有这样一个参数,replica.lag.max.messages,这个参数的意思是,在生产者写入数据,leader Partition维护的ISR列表中所有的follower Partition同步leader数据,follower Partition的LEO落后的条数,不能超过这个参数,一旦超过,会将follower Partition踢出去

默认配置下,一般生产者写数据要所有follower都写入成功才算成功,如果某台follower Partition卡住,落后了,会导致生产者也卡住,直到follower被踢出去ISR列表,此时leader Partition和其他follower Partition的HW也会随着LEO推进。

在这个过程中,消费者是读取不到已经写入的HW到LEO之间的数据的

每次follower过来fetch数据的时候,leader会判断Leo是否落后,一旦落后,剔除

还有一个参数min.sync.replicas,意思是必须要有多少个副本在ISR中,生产端写入可以配置ack=-1,意思是每次写入必须要写入所有ISR副本才算成功,这里也可以理解,如果ISR副本数小于配置的,生产者会卡住。

不过我们也可以思考一下,在线上环境如果配置这样的参数的话,其实也有问题的,一般高并发场景下,大数据量都是瞬间涌入,可能就会导致有些follower Partition因为机器原因或者full GC原因,会偶尔跟不上数据,如果这样的情况重复出现,就会导致某些follower Partition 频繁被踢出ISR列表。这样子其实不是很好。

所以后面版本Kakfa有引入了新的参数,replica.lag.time.max.ms,默认10s,根据时间来判断,落后超过多长时间就剔除,这样子和之前的方案比起来,只要在一定时间内follower partition追上数据同步,就不会频繁被踢出。

时间过得好快,这是2020年的第一篇文章,技术真的需要去耐心钻研,我们的面“肌”之旅还没有结束,本文主要对ISR机制的一些技术点做了剖析,若文中有误,欢迎批评指正。一起成长,一起去积累我们的技术肌肉,我们的目标是什么?大!大!大!

I·See·Right 遇见kafka的ISR相关推荐

  1. kafka的isr理解

    问题如下: kafka 为了保证数据的一致性使用了isr 机制 1 首先我们知道kafka 的数据是多副本的,每个topic 下的每个分区下都有一个leader 和多个follower, 2 每个fo ...

  2. Kafka的 ISR 概念和作用

    一.ISR 是什么 首先,ISR 的全称叫做: In-Sync Replicas (同步副本集), 我们可以理解为和 leader 保持同步的所有副本的集合. 一个分区的所有副本集合叫做 AR( As ...

  3. 当Elasticsearch遇见Kafka

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由michelmu发表于云+社区专栏 Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和高扩展性之外,对多种 ...

  4. Kafka的ISR收缩机制

    ISR什么时候收缩 ISR什么时候扩展 ISR的传播机制 Broker宕机之后怎么ISR的收缩? Kafka在启动的时候,会启动一个副本管理器ReplicaManager,这个副本管理器会启动几个定时 ...

  5. kafka HA ISR机制

    一.kafka replica 当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica).kafka的replica包含leade ...

  6. Kafka之ISR机制的理解

    Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失. 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同 ...

  7. kafka的isr机制

    Data Replication Kafka 的 Data Replication 需要解决如下问题: 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Rep ...

  8. Kafka 的 ISR 副本同步队列

    ISR,副本同步队列.ISR 中包括 Leader 和 Follower.如果 Leader 进程挂掉,会在 ISR 队列中选择一个服务作为新的 Leader.有延迟条数和延迟时间两个参数决定一台服务 ...

  9. Kafka ISR机制

    kafka的ISR机制被成为"不丢消息"机制.在说ISR机制前,先讲一下kafka的副本(replica). kafka的Replica kafka的topic可以设置有N个副本( ...

最新文章

  1. Win7 SP1 msado15 unresolved external symbol
  2. java 多线程经典例子——生产者与消费者的问题
  3. 一步步编写操作系统 40 内存分页下用户程序与操作系统的关系
  4. 计算机网络——编码和调制
  5. 今日头条php笔试题,2017年今日头条笔试题目
  6. 2020年班级管理html,2020-2021学年度小学四年级班级管理工作计划
  7. 表格对角线两边打字_word单元格斜线 word表格中斜线表头制作过程及表头斜线两边打字怎么操作...
  8. uni-app 微信小程序启用组件按需注入
  9. python写音乐_你想过用代码来写音乐吗?我用业余时间开发的一个可以编程写音乐的python库(一)...
  10. Linux系统C++调试利器systemtap定位内存double free
  11. 笔记本可以跑虚拟机吗_什么笔记本跑虚拟机不卡?
  12. 将QLV视频格式转换为MP4格式
  13. 统计图配色方案_填充
  14. vol.132 《流浪地球》带火了中国科幻?(嘉宾:郑军)
  15. RTX 3080被炒到原价7倍,最高卖5000美元,英伟达官方道歉:将打击黄牛抢购
  16. 浅谈Hybrid技术——Big-man
  17. 信息安全:信息收集之:被动信息收集
  18. 手机网络专业测试软件,3个专业网速测试APP,免费无广告
  19. 清华大学携手大数据服务商八爪鱼,探讨大数据商业创新应用
  20. 苹果 Apple Watch 在测量人体血糖方面取得突破性进展,可实现无创、持续血糖监测,意味着什么

热门文章

  1. spingboot + IKAnalyzer 实现中文分词
  2. svn update中文报错_svn 报错 【总结】【重点】
  3. oracle查询所有表字段属性_Oracle查询表字段属性的方法
  4. python itchat实现机器人
  5. 明明用管理员身份打开的cmd,但是运行regAsm却提示无法写入注册表,需要管理员凭据
  6. 打开matlab的规则,matlab的函数和运算规则
  7. javaScript 显示图片的例子
  8. 我国在计算机科学领域故事,【校史故事365】333 胡正家:我国著名计算机专家...
  9. 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提 成7.5%;20万到40万之间时,
  10. Arcgis提取指定面矢量内点或线数据