欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lso/

很多同学对于Kafka的认知仅限于在LEO和HW之间,有可能认知还出现错误,对此记住一点,这两个都是指最后一条的下一条的位置而不是指最后一条的位置。不过本文的关注点不在于此,而在于LSO这个概念。如果需要了解LEO和HW的同学可在文末留言,后面也可以考虑出个科普LEO和HW的文章。

LSO特指LastStableOffset,在上一篇《Kafka科普系列 | 什么是LW和logStartOffset》中提及过这个概念,它具体的与Kafka的事务有关。

可能大家在使用Kafka的时候并没有太在意一个消费端的参数——isolation.level,这个参数用来配置消费者的事务隔离级别。字符串类型,有效值为“read_uncommitted”和 “read_committed”,表示消费者所消费到的位置,如果设置为“read_committed”,那么消费者就会忽略事务未提交的消息,即只能消费到 LSO(LastStableOffset)的位置,默认情况下为 “read_uncommitted”,即可以消费到 HW(High Watermark)处的位置。注意:follower副本的事务隔离级别也为“read_uncommitted”,并且不可修改。

对于Kafka中事务的讲解会在后面的系列文章《Kafka科普系列 | 什么是Kafka的事务?》中进行解答,在这里只需了解:在开启Kafka事务时,生产者发送了若干消息(比如msg1、msg2、msg3)到broker中,如果生产者没有提交事务(执行commitTransaction),那么对于isolation.level = read_committed的消费者而言是看不到这些消息的,而isolation.level = read_uncommitted则可以看到。事务中的第一条消息的位置可以标记为firstUnstableOffset(也就是msg1的位置)。

这个LSO还会影响Kafka消费滞后量(也就是Kafka Lag,很多时候也会被称之为消息堆积量)的计算。不妨我们先来看一下下面这幅图。

在图中,对每一个分区而言,它的 Lag 等于 HW – ConsumerOffset 的值,其中 ConsumerOffset 表示当前的消费位移。当然这只是针对普通的情况。如果为消息引入了事务,那么 Lag 的计算方式就会有所不同。

如果消费者客户端的 isolation.level 参数配置为“read_uncommitted”(默认),那么 Lag的计算方式不受影响;如果这个参数配置为“read_committed”,那么就要引入 LSO 来进行计 算了。


对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset,如上图所示),对已完成的事务而言,它的值同 HW 相同, 所以我们可以得出一个结论:LSO≤HW≤LEO。(如下图所示)

所以,对于分区中有未完成的事务,并且消费者客户端的 isolation.level 参数配置为“read_committed”的情况,它对应的 Lag 等于 LSO – ConsumerOffset 的值。

这个知识点的掌握也能够为你在面试环节中加分。大多数情况下,除非面试官是专门做Kafka相关的开发工作,一般很少有人会关注LSO这个东西,也就是说大概率情况下面试官也不知道这是什么。“什么是Kafka Lag,怎么计算Kafka Lag”类似这种问题反而会被经常问及,那么你在回答完HW - ConsumedOffset=Lag之后,如果再接着补上LSO的内容,相信面试官会为之眼前一亮。

来源:本文修改自《深入理解Kafka》一书中若干篇幅。

欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lso/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

Kafka科普系列 | 什么是LSO?相关推荐

  1. Kafka科普系列 | 什么是LW和logStartOffset?

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lw-and-logstartoffset/ 很多读者对 Kafka 中的 ...

  2. Kafka科普系列 | 原来Kafka中的选举有这么多?

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-selection/ 面试官在考查你Kafka知识的时候很可能会故弄玄虚的问 ...

  3. Kafka科普系列 | 轻松理解Kafka中的延时操作

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-delay-operation/ 本文起源于之前去面试的一道面试题,面试题大 ...

  4. 图灵科普系列丛书封面有奖征集(贴图送书)

    图灵科普系列丛书封面有奖征集(贴图送书) 知道吗?图灵要出科普书 啦! 现面对广大设计爱好者征集封面设计方案,希望大家踊跃参与,发挥你的想象力,充分展现个性与创意,快来进行一次思想大碰撞吧! 活动详情 ...

  5. 前端科普系列(2):Node.js 换个角度看世界,

    [前端科普系列]往期精彩内容: 前端科普系列(1):很有趣的一篇前端简史,作者有心了~主要介绍 web 前端发展的历史.大事件. 本文为系列文章(2),主要介绍 Node.js 的前世今生.核心科技以 ...

  6. 小甲鱼 OllyDbg 教程系列 (一) :二进制破解科普系列之 ReverseMe

    小甲鱼 视频教程( 4.5 集 ):https://www.bilibili.com/video/av6889190?p=4 实验程序 reverseME.exe 下载地址:https://pan.b ...

  7. 科普系列:AUTOSAR与OSEK网络管理比较(下)

    在上篇中我们分别在状态机和报文格式方面对OSEK和AUTOSAR网络管理进行了简单介绍,感兴趣的小伙伴请移步至文章<科普系列:AUTOSAR与OSEK网络管理比较(上)>. 三.OSEK与 ...

  8. 科普系列:AUTOSAR与OSEK网络管理比较(上)

    一.前言 汽车网络管理从根本上来说是为了省电的,基本的实现方式就是汽车在没有使用的情况下一些ECU会通过网络管理协调进入低功耗模式或者睡眠模式,从而达到省电的目的.目前主流的网络管理标准有两个,一个是 ...

  9. GIT科普系列5:index in git

    背景: git的使用其实没有想象中的那么复杂,平日里真正使用的指令都是极少数.最简单格式的.之所以使用过程中感觉操作复杂.冲突不断,究其根源是对git的设计理念缺乏了解,没有搞清楚git实现版本控制的 ...

最新文章

  1. C#中的快捷键,可以更方便的编写代码
  2. 类加载器、双亲委派模型
  3. C#调用C++的dll文件方法
  4. (五)深入浅出TCPIP之TCP流量控制
  5. SpringBoot Unable to find a @SpringBootConfiguration, you need to use....
  6. rffc2071_基于RFFC2071的变频器设计
  7. [87] 傻B、牛B、装B的英文用法详解
  8. 爱奇艺播放按钮动画解析
  9. 74HC165基础篇(一)
  10. 【米哈游】2022春季校园招聘
  11. EasyExcel实现Mysql数据库Excel数据导出
  12. 三玖天下第一!让三玖陪你写代码(为VScode加入背景图片)
  13. Shell脚本+if语句判断是下午还是中午还是早上(乱搞)
  14. HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步
  15. 云平台和云管平台的三大区别详细解析
  16. 王爽汇编语言 实验7
  17. Flume部署安装详细图文步骤(单节点)
  18. Bootstrap 组件:缩略图组件(thumbnail)
  19. Goland 常用插件
  20. 阿里云实战之一(必备程序安装)

热门文章

  1. JDK1.8并发包中的类
  2. 腾讯云10亿扶持小程序:3元套餐可能免费
  3. Linux学习日记——源码编译Apache
  4. python模块详解 time与date time
  5. 关于Unity中坐标系的种类
  6. RocketMQ的安装与配置
  7. AsyncTask实现断点续传
  8. Validate + Boostrap tooltip 表单验证示例
  9. ActiveMQ点对点消息通信demo
  10. easyui datagrid local pager 表格本地分页