Kafka科普系列 | 什么是LSO?
欢迎跳转到本文的原文链接: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?相关推荐
- Kafka科普系列 | 什么是LW和logStartOffset?
欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lw-and-logstartoffset/ 很多读者对 Kafka 中的 ...
- Kafka科普系列 | 原来Kafka中的选举有这么多?
欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-selection/ 面试官在考查你Kafka知识的时候很可能会故弄玄虚的问 ...
- Kafka科普系列 | 轻松理解Kafka中的延时操作
欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-delay-operation/ 本文起源于之前去面试的一道面试题,面试题大 ...
- 图灵科普系列丛书封面有奖征集(贴图送书)
图灵科普系列丛书封面有奖征集(贴图送书) 知道吗?图灵要出科普书 啦! 现面对广大设计爱好者征集封面设计方案,希望大家踊跃参与,发挥你的想象力,充分展现个性与创意,快来进行一次思想大碰撞吧! 活动详情 ...
- 前端科普系列(2):Node.js 换个角度看世界,
[前端科普系列]往期精彩内容: 前端科普系列(1):很有趣的一篇前端简史,作者有心了~主要介绍 web 前端发展的历史.大事件. 本文为系列文章(2),主要介绍 Node.js 的前世今生.核心科技以 ...
- 小甲鱼 OllyDbg 教程系列 (一) :二进制破解科普系列之 ReverseMe
小甲鱼 视频教程( 4.5 集 ):https://www.bilibili.com/video/av6889190?p=4 实验程序 reverseME.exe 下载地址:https://pan.b ...
- 科普系列:AUTOSAR与OSEK网络管理比较(下)
在上篇中我们分别在状态机和报文格式方面对OSEK和AUTOSAR网络管理进行了简单介绍,感兴趣的小伙伴请移步至文章<科普系列:AUTOSAR与OSEK网络管理比较(上)>. 三.OSEK与 ...
- 科普系列:AUTOSAR与OSEK网络管理比较(上)
一.前言 汽车网络管理从根本上来说是为了省电的,基本的实现方式就是汽车在没有使用的情况下一些ECU会通过网络管理协调进入低功耗模式或者睡眠模式,从而达到省电的目的.目前主流的网络管理标准有两个,一个是 ...
- GIT科普系列5:index in git
背景: git的使用其实没有想象中的那么复杂,平日里真正使用的指令都是极少数.最简单格式的.之所以使用过程中感觉操作复杂.冲突不断,究其根源是对git的设计理念缺乏了解,没有搞清楚git实现版本控制的 ...
最新文章
- C#中的快捷键,可以更方便的编写代码
- 类加载器、双亲委派模型
- C#调用C++的dll文件方法
- (五)深入浅出TCPIP之TCP流量控制
- SpringBoot Unable to find a @SpringBootConfiguration, you need to use....
- rffc2071_基于RFFC2071的变频器设计
- [87] 傻B、牛B、装B的英文用法详解
- 爱奇艺播放按钮动画解析
- 74HC165基础篇(一)
- 【米哈游】2022春季校园招聘
- EasyExcel实现Mysql数据库Excel数据导出
- 三玖天下第一!让三玖陪你写代码(为VScode加入背景图片)
- Shell脚本+if语句判断是下午还是中午还是早上(乱搞)
- HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步
- 云平台和云管平台的三大区别详细解析
- 王爽汇编语言 实验7
- Flume部署安装详细图文步骤(单节点)
- Bootstrap 组件:缩略图组件(thumbnail)
- Goland 常用插件
- 阿里云实战之一(必备程序安装)