springboot和kafka结合其中enable.auto.commit等于false失效
事件描述
公司使用的是Spring Cloud工作的微服务框架。其中做了SpringBoot和kafka的结合。但是意外的是enable.auto.commit参数设置成了false,kafka的offset依然提交了(也没有进行人工提交offset)。为了验证这个是否为真实情况,首先测试环境启动项目,enable.auto.commit设置为false。首先记录测试topic的偏移量和logsize(测试topic名字为topicTest),然后本地启动Producer,向topicTest发送10条数据,通过kafka manager观察是否发送到broker。经过查看,消息确实发送到了topicTest中。然后启动Consumer来消费,其中消费组为groupTest。查看kafka manager结果发现offset竟然偏移了。
心中很是郁闷,于是再向topicTest发送10条数据,自己写了个Consumer的main方法,配置也是enable.auto.commit为false。然后启动开始消费,惊人的情况出现了,offset并没有发生偏移。那么这就可以肯定问题出在了spring结合kafka这个点上。
查看spring的源码查找问题
为什么enable.auto.commit设置为false了依然会提交。猜测一定是spring做了什么手脚所以才导致的提交。打断点,追踪断点到KafkaMessageListenerContainer这个类里。可以发现一个很显眼的地方。
如果我们enable.auto.commit设置为false,那么就会走标红的if语句。而且下面有个stopInvokerAndCommitManualAcks()方法,看名字就知道是人工提交的意思。那么我们进去stopInvokerAndCommitManualAcks()方法瞅瞅。
如上图所示有个processCommits()方法,那么继续追进去:
单单看标红的方法是不是就知道这方法里面是更新offset和提交offset的方法。那么我们继续追进去:
看到这里是不是豁然开朗了。这tm明显是手动提交offset的代码啊。至此,终于明白为什么SpringBoot和Kafka结合后,用Spring的方法来初始化enable.auto.commit参数为false,offset依然会提交。
结论:Spring做为一个框架很明显是想减少我们的工作量。这就造成,如果我们把enable.auto.commit参数设置成true。那么offset交给kafka来管理,offset进行默认的提交模式。
enable.auto.commit参数设置成false。那么就是Spring来替为我们做人工提交,从而简化了人工提交的方式。
所以kafka和springboot结合中的enable.auto.commit为false为spring的人工提交模式。enable.auto.commit为true是采用kafka的默认提交模式。
最后终于送了一口气,要是enable.auto.commit的设置为false,而且没有进行人工提交offset,那么这将是一个巨大的工程事故。别看只是一个小小的参数。辛亏,Spring的开发者早已料到这一刻,从而防止小白忘记手动提交offset。另一方面也减少了开发的难易程度。
springboot和kafka结合其中enable.auto.commit等于false失效相关推荐
- 容易被误会的 Kafka 消费者属性 enable.auto.commit
前言 理解一下Kafka的读的自动提交功能. 找到了一篇专门介绍这个功能的文章,选择主要的内容进行一下翻译和做笔记. 自动提交参数auto.commit的设置 Understanding the 'e ...
- 理解 Kafka 消费者属性的 enable.auto.commit
前言 理解一下Kafka的读的自动提交功能. 找到了一篇专门介绍这个功能的文章,选择主要的内容进行一下翻译和做笔记. 正文 Understanding the 'enable.auto.commit' ...
- Kafka之enable.auto.commit使用解析
通过字面意思我们不难理解这是kafka的自动提交功能. 配置消费者(配置ENABLE_AUTO_COMMIT_CONFIG为 true 配置自动提交) enable.auto.commit 的默认值是 ...
- SpringBoot整合kafka(实现producer和consumer)
转载自 SpringBoot整合kafka(实现producer和consumer) 在Windows环境下安装运行Kafka:https://www.jianshu.com/p/d64798e81f ...
- SpringBoot 重置 kafka 偏移量offset(kafka-0.10.1.0)
如果使用的自动提交偏移量的模式,偏移量会给到kafka或者zk进行管理,其中kafka的偏移量重置给了重新消费kafka内未过期的数据提供了机会,当消费者出错,比如消费了数据,但是中途处理失败,导致数 ...
- SpringBoot集成Kafka并调优
1. 集成 SpringBoot SpringBoot 是一个在 JavaEE 开发中非常常用的组件.可以用于 Kafka 的生产者,也可以用于 Kafka 的消费者. 1.1 在 IDEA 中安装 ...
- SpringBoot 集成 kafka,基于注解批量消费设置
网上关于SpringBoot 集成kafka的批量消费功能需要手动创建类(这篇文章不错:[弄nèng - Kafka]应用篇(三) -- Springboot整合Kafka(批量消费)_司马缸砸缸了- ...
- springboot 整合kafka 实现生产,消费数据
一 kafka集群的启动 1.1 机器说明 192.168.152.128 master 192.168.152.129 slaver01 192.168.152.130 slaver02 1.2 查 ...
- Springboot 集成kafka
一.创建项目并导入pom依赖 <dependency><groupId>org.springframework.kafka</groupId><artifac ...
最新文章
- 面试官:为什么 SpringBoot 的 jar 可以直接运行?
- Vue.js 2 渐进式前端框架 的最佳学习方法
- “3D几何与视觉技术”全球在线研讨会第五期~隐式3D形状表示学习
- TokenInsight:BTC全网流量逐级上升,链上活跃度环比上周大幅回升
- Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题
- IIS5IIS6IIS7的ASP.net 请求处理过程比较(转)
- hdu5141 线段树
- C语言随笔小算法:单向链表
- Leetcode:415. Add Strings
- python中wordcloud函数不同形状云图_10行Python代码生成任意形状的文字云图
- java加密不可逆,32位不可逆加密算法Java实现
- 可调稳压电源lm317实验报告_LM317可调直流稳压电源DIY,非常实用!
- 接口测试 requests的身份认证方式
- 女程序员开发软件挂专家号,转手获利被刑拘
- 超低功耗MCU如何降低功耗
- 1.3-15:苹果和虫子
- html静态网站中华传统文化网站主题设计 传统文化艺术耍牙15页
- 华为南研所2015年面试经历总结
- 08. 路由器的基本配置和Talent配置
- 浅谈Jsch SSH2