事件描述

公司使用的是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失效相关推荐

  1. 容易被误会的 Kafka 消费者属性 enable.auto.commit

    前言 理解一下Kafka的读的自动提交功能. 找到了一篇专门介绍这个功能的文章,选择主要的内容进行一下翻译和做笔记. 自动提交参数auto.commit的设置 Understanding the 'e ...

  2. 理解 Kafka 消费者属性的 enable.auto.commit

    前言 理解一下Kafka的读的自动提交功能. 找到了一篇专门介绍这个功能的文章,选择主要的内容进行一下翻译和做笔记. 正文 Understanding the 'enable.auto.commit' ...

  3. Kafka之enable.auto.commit使用解析

    通过字面意思我们不难理解这是kafka的自动提交功能. 配置消费者(配置ENABLE_AUTO_COMMIT_CONFIG为 true 配置自动提交) enable.auto.commit 的默认值是 ...

  4. SpringBoot整合kafka(实现producer和consumer)

    转载自 SpringBoot整合kafka(实现producer和consumer) 在Windows环境下安装运行Kafka:https://www.jianshu.com/p/d64798e81f ...

  5. SpringBoot 重置 kafka 偏移量offset(kafka-0.10.1.0)

    如果使用的自动提交偏移量的模式,偏移量会给到kafka或者zk进行管理,其中kafka的偏移量重置给了重新消费kafka内未过期的数据提供了机会,当消费者出错,比如消费了数据,但是中途处理失败,导致数 ...

  6. SpringBoot集成Kafka并调优

    1. 集成 SpringBoot SpringBoot 是一个在 JavaEE 开发中非常常用的组件.可以用于 Kafka 的生产者,也可以用于 Kafka 的消费者. 1.1 在 IDEA 中安装 ...

  7. SpringBoot 集成 kafka,基于注解批量消费设置

    网上关于SpringBoot 集成kafka的批量消费功能需要手动创建类(这篇文章不错:[弄nèng - Kafka]应用篇(三) -- Springboot整合Kafka(批量消费)_司马缸砸缸了- ...

  8. springboot 整合kafka 实现生产,消费数据

    一 kafka集群的启动 1.1 机器说明 192.168.152.128 master 192.168.152.129 slaver01 192.168.152.130 slaver02 1.2 查 ...

  9. Springboot 集成kafka

    一.创建项目并导入pom依赖 <dependency><groupId>org.springframework.kafka</groupId><artifac ...

最新文章

  1. 面试官:为什么 SpringBoot 的 jar 可以直接运行?
  2. Vue.js 2 渐进式前端框架 的最佳学习方法
  3. “3D几何与视觉技术”全球在线研讨会第五期~隐式3D形状表示学习
  4. TokenInsight:BTC全网流量逐级上升,链上活跃度环比上周大幅回升
  5. Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题
  6. IIS5IIS6IIS7的ASP.net 请求处理过程比较(转)
  7. hdu5141 线段树
  8. C语言随笔小算法:单向链表
  9. Leetcode:415. Add Strings
  10. python中wordcloud函数不同形状云图_10行Python代码生成任意形状的文字云图
  11. java加密不可逆,32位不可逆加密算法Java实现
  12. 可调稳压电源lm317实验报告_LM317可调直流稳压电源DIY,非常实用!
  13. 接口测试 requests的身份认证方式
  14. 女程序员开发软件挂专家号,转手获利被刑拘
  15. 超低功耗MCU如何降低功耗
  16. 1.3-15:苹果和虫子
  17. html静态网站中华传统文化网站主题设计 传统文化艺术耍牙15页
  18. 华为南研所2015年面试经历总结
  19. 08. 路由器的基本配置和Talent配置
  20. 浅谈Jsch SSH2

热门文章

  1. 新手使用APICloud可视化开发搭建商城主页
  2. 朗润国际期货:02月03日周五《新闻联播》主要内容
  3. 如何选择视频聊天程序搭建视频聊天网站
  4. 做共享软件的一些心得与经验
  5. 计算机操作 操作鉴定试题及答案,计算机操作员初级试题及答案
  6. SAGA GIS使用———加载以及显示影像
  7. OmniGraffle 7 Mac 注册码 账号:Appked 密码:MFWG-GHEB-HYTW-CGHT-CSXU-QCNC-SXU
  8. 获取手机唯一识别码IMEI
  9. 2022-5月如何使用疯狂URL获取抖音推流码地址(抖音无人直播教程)
  10. 直逼 Flash 的流畅感:jQuery 运动特效展示