SpringBoot4.0集成Kafka4-消费者如何提交偏移量Offset 📅 发布时间:2026/7/11 16:23:52 👁️ 浏览次数: Offset的作用Kafka将消息存储在topic中每个topic可以包含多个partition。每个消费者从topic的特定partition读取消息。在此过程中Kafka借助offset来追踪消费者已读取的消息位置。offset是从零开始的整数序列每存储一条消息对应partition的offset就会递增1。假设某个消费者已从partition读取了5条消息消费完成以后需要把offset提交给Kafka服务端Kafka的服务端就会将offset从0-4标记为已提交。当该消费者下次尝试读取消息时将从offset5开始继续消费。消费者的offset的提交总体来说分2种情况一种是每隔一段时间自动提交一种是按照AckMode进行提交。自动提交默认自动提交是关闭的我们可以通过配置进行打开spring:kafka:consumer:enable-auto-commit:trueauto-commit-interval:10senable-auto-commit是否启用自动提交默认是禁用auto-commit-interval自动提交的时间间隔比如这是我们的consumerKafkaListener(topicsquickstart-events)publicvoidonMessage(Stringmessage)throwsException{log.info(on message:{},message);}发送完消息以后立即停掉应用然后再重启应用消息就会再次投递过来因为还不到10soffset还没提交。按照AckMode提交目前支持7种不同的AckMode可以分为2大类一类是由Spring容器自动提交Spring会去监听业务逻辑的执行业务逻辑执行完以后如果不抛出异常Spring会帮着自动提交offset如果出了异常会走异常处理逻辑另一类是由Listener手动方式提交。自动方式RECORD当listener处理完当前记录后立即提交该记录的offset。BATCH当 poll() 方法返回的所有记录都处理完成后提交这批记录的offset这是默认的AckMode。TIME当 poll() 方法返回的所有记录都处理完成后且距离上次提交时间超过设定的ackTime时提交offset。COUNT当 poll() 方法返回的所有记录都处理完成后且自上次提交以来接收的消息数量达到ackCount阈值时提交offset。COUNT_TIME结合TIME与COUNT的混合模式只要满足任一条件时间间隔或消息数量即执行提交。手动方式MANUAL由listener负责调用Acknowledgment.acknowledge()方法。该方法调用后容器将按照BATCH模式的语义提交offset。MANUAL_IMMEDIATE当listener调用Acknowledgment.acknowledge()方法时立即提交当前offset。如果使用了事务offset会被发送到事务中其语义等同于 RECORD 或 BATCH 模式具体取决于listener类型单条记录监听器或批量监听器。还是上面的案例我们禁用掉自动提交修改我们的listener:KafkaListener(topicsquickstart-events)publicvoidonMessage(Stringmessage)throwsException{log.info(on message:{},message);Thread.sleep(10000);}发一条消息以后立即关闭应用重启以后消息会再次投递过来因为此时的AckMode是默认的BATCH业务还没处理完listener就挂掉了还没有机会去提交offset。但是如果等10秒以后再重启应用消息就不会再次投递过来因为offset已经提交了。自定义AckMode比如我们想改成AckMode.MANUAL_IMMEDIATEBeanpublicContainerCustomizerObject,Object,ConcurrentMessageListenerContainerObject,ObjectkafkaContainerCustomizer(){returncontainer-{container.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE);};}此时需要修改我们的listener手动去提交offsetKafkaListener(topicsquickstart-events)publicvoidonMessage(Stringmessage,Acknowledgmentack)throwsException{log.info(on message:{},message);Thread.sleep(10000);ack.acknowledge();}如果不想提交offset还可以KafkaListener(topicsquickstart-events)publicvoidonMessage(Stringmessage,Acknowledgmentack)throwsException{log.info(on message:{},message);ack.nack(Duration.ofSeconds(5));}此时每隔5秒消息就会重新投递过来一次。更多文章请关注公众号“爪哇优太儿”
工作笔记知识点总结 1 MYSQL查看执行计划纤细 1 explain format=tree或者explain analyze 看SQL真实执行计划。子查询推入。 2 PG数据库确定主备角色的5种办法 方式一:操作系统上查看WAL发送进程或WAL接收进程 流复制主库上有WAL发送进程,流复制备库上有WAL接收进程 主库 [postgres@postgre… 2026/7/7 7:43:40
Android功耗系列专题理论之九:芯片功耗问题分析方法 【关注我,后续持续新增专题博文,谢谢!!!】上一篇我们讲了:这一篇我们开始讲: Android功耗系列专题理论之九:芯片功耗问题分析方法一、芯片功耗问题分析方法高通平台电源控制架构解析… 2026/7/10 8:11:23
重磅!国内一站式畅享四大AI模型ChatGPT+Claude+Gemini+Grok,效率直接起飞 经过粉丝的持续监督下,博主最近熬夜加班的测试修复bug,AI镜像网站终于上线了!!! 铁粉第一次催博主: 第二次催博主: 第三次催博主: 当时快过年了,为了保证用户有一个良好… 2026/7/11 3:46:58
AI 辅助技术决策记录(ADR):从架构决策到团队知识管理的系统化方法 AI 辅助技术决策记录(ADR):从架构决策到团队知识管理的系统化方法 一、技术决策最容易被浪费的,不是「做决策的时间」,而是「决策背后的理由没有记录下来,导致同样的问题被反复讨论」 技术决策记录… 2026/7/11 16:22:22
纽扣电池寿命增强方案:NBM5100A与MK60DN510VLQ10组合应用 1. 纽扣电池寿命增强方案概述 在物联网设备和便携式电子产品中,CR2032等纽扣电池因其体积小、重量轻的特点被广泛使用。但这类电池存在一个致命缺陷:当设备需要短时大电流脉冲时(如无线传输、传感器启动等),电池电压会… 2026/7/11 16:20:22
直流有刷电机驱动方案:TC78H653FTG与PIC18F57K42应用解析 1. 直流有刷电机驱动方案概述 在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便和成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,配合PIC18F57K42微控制器的灵活控制能力&… 2026/7/11 16:18:21
基于TC78H653FTG和PIC18F46K40的直流有刷电机控制方案 1. 项目概述:释放直流有刷电机潜力的技术方案 在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便和成本低廉等优势,仍然是许多应用场景的首选驱动方案。然而,传统驱动方式往往无法充分发挥电机的性能潜力࿰… 2026/7/11 16:18:21
ThinkPad风扇智能控制:告别噪音,拥抱静音高效 ThinkPad风扇智能控制:告别噪音,拥抱静音高效 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾因ThinkPad风扇突然狂转而被打断工作思路… 2026/7/11 16:18:21
CSP 202312-2 因子化简:3种质因数分解算法对比与10^10边界优化 CSP 202312-2 因子化简:3种质因数分解算法对比与10^10边界优化在算法竞赛和编程认证考试中,质因数分解是一个经典且高频出现的问题。CCF CSP认证2023年12月的第二题"因子化简"就考察了这一核心算法能力。本文将深入探讨三种主流质因数分解算法… 2026/7/11 16:16:21
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59