Kafka Offset 自动提交和手动提交 - 漏消费与重复消费
目录
1. 引言
2. Offset 提交方式概述
2.1 自动提交 Offset
2.2 手动提交 Offset
3. 漏消费与重复消费的问题分析
3.1 自动提交模式下的漏消费和重复消费
漏消费
重复消费
3.2 手动提交模式下的漏消费和重复消费
漏消费
重复消费
4. 自动提交与手动提交的选择
4.1 适用场景
4.2 配置建议
5. 代码示例
5.1 自动提交示例
5.2 手动提交示例
6. 结论
参考文档
1. 引言
Kafka 是当前广泛使用的分布式消息队列系统,其强大的吞吐量和可靠性使其在实时数据流处理中广受欢迎。在 Kafka 消费过程中,Offset 是一个重要的概念,它记录了每个消费组读取消息的进度。本文将详细探讨 Kafka Offset 的自动提交和手动提交模式,并分析它们可能导致的漏消费和重复消费问题。
2. Offset 提交方式概述
2.1 自动提交 Offset
在 Kafka 中,enable.auto.commit 配置项决定是否开启自动提交。当设置为 true 时,Kafka Consumer 会定期(由 auto.commit.interval.ms 配置项指定的时间间隔)自动提交当前的 Offset。自动提交的优点是实现简单,使用方便,但缺点是可能会导致漏消费或重复消费的问题。
2.2 手动提交 Offset
手动提交 Offset 是指由程序员在消费逻辑中显式地调用提交方法(如 commitSync() 或 commitAsync())进行 Offset 提交。手动提交提供了对 Offset 更精细的控制,能够减少漏消费和重复消费的风险,但也增加了实现的复杂性。
3. 漏消费与重复消费的问题分析
3.1 自动提交模式下的漏消费和重复消费
漏消费
在自动提交模式下,Kafka 会按固定的时间间隔提交 Offset,如果在 Offset 自动提交之后但在实际消费消息之前应用崩溃或发生其他错误,可能导致该 Offset 被提交,但实际消息并未消费。这就会造成消息的漏消费。
重复消费
自动提交可能会在消息实际处理完成之前提交 Offset。如果在 Offset 提交之后但消息处理尚未完成时应用崩溃,则在重启后,Kafka 将从已提交的 Offset 开始重新消费,导致部分消息被重复消费。
3.2 手动提交模式下的漏消费和重复消费
漏消费
在手动提交模式下,如果消息处理完成但在手动提交 Offset 之前应用崩溃或发生错误,则会导致该批次消息未被提交 Offset,从而在下次消费时从上一次提交的 Offset 开始重新消费,理论上不会导致漏消费问题。
重复消费
由于手动提交模式通常在消息处理完成后提交 Offset,因此应用崩溃可能导致上一次提交的 Offset 和实际消费的消息之间出现重复,但通过精细控制可以尽量减少重复消费的风险。
4. 自动提交与手动提交的选择
4.1 适用场景
- 自动提交:适用于对消息偶尔漏消费或重复消费容忍度较高的场景,比如一些日志数据处理,自动提交可以简化代码逻辑。
- 手动提交:适用于对数据一致性要求较高的场景,比如金融数据处理,手动提交可以更精细地控制消费流程,减少数据误差。
4.2 配置建议
- 若使用 自动提交,应确保
auto.commit.interval.ms设置合理,避免过长的提交间隔导致更多的重复消费。 - 若使用 手动提交,应使用
commitSync()进行同步提交,确保 Offset 成功提交;或者使用commitAsync()提高性能,但要处理可能的失败提交。
5. 代码示例
5.1 自动提交示例
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("test-topic"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());}
}
5.2 手动提交示例
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "false"); // 禁用自动提交
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("test-topic"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());}// 手动同步提交consumer.commitSync();
}
6. 结论
Kafka Offset 的自动提交和手动提交各有优缺点,选择适合的方式需要根据具体的业务场景需求来决定。自动提交适合简单场景,但容易发生漏消费和重复消费,而手动提交提供了更高的灵活性和可靠性。
相关文章:
Kafka Offset 自动提交和手动提交 - 漏消费与重复消费
目录 1. 引言 2. Offset 提交方式概述 2.1 自动提交 Offset 2.2 手动提交 Offset 3. 漏消费与重复消费的问题分析 3.1 自动提交模式下的漏消费和重复消费 漏消费 重复消费 3.2 手动提交模式下的漏消费和重复消费 漏消费 重复消费 4. 自动提交与手动提交的选择 4.1…...
Vue3父组件和子组件
子组件暴露方法给父组件,父组件传值 子组件 const editCalendar (value: string) > {console.log(获取父组件的值, value)};//暴露给外部调用defineExpose({editCalendar,}); 父组件 <template> <CalendarEdit ref"editRef" /> </…...
Linux 定时任务全解析
文章目录 一、Cron 服务1.1安装1.2配置文件格式1.3使用方法1.4系统级与用户级 Cron 任务区别 二、At 服务2.1安装2.2工作原理2.3使用方法 一、Cron 服务 1.1安装 在大多数 Linux 发行版中,Cron 服务通常已经默认安装。例如在 Ubuntu 系统中,可以通过以…...
XLNet——打破 BERT 局限的预训练语言模型
近年来,深度学习在自然语言处理(NLP)领域取得了革命性进展,其中 BERT 的出现标志着双向语言建模的强大能力。然而,BERT 也存在一些局限性,限制了其在生成任务中的表现。2019 年,由 Google 和 Ca…...
开源代码统计工具cloc的简单使用
一.背景 公司之前开发了个小系统,要去申请著作权,需要填写代码数量。应该怎么统计呢?搜索了一下,还是用开源工具cloc吧!我的操作系统是windows,代码主要是java项目和vue项目。 二.到哪里找 可以去官方下载…...
如何创建一个项目用于研究element-plus的原理
需求:直接使用element-plus未封装成组件的源码,创建一个项目,可以使用任意的element-plus组件,可以深度研究组件的运行。例如研究某一个效果,如果直接在node_modules修改elment-plus打包之后的那些js、mjs代码…...
单片机进阶硬件部分_day2_项目实践
设计要求 从绘制原理图到画PCB板,完成智能云衣柜项目 STM32 (Modbus)云IOT衣物云端管理 华为PCB布线规范 基于IoT的智享家主控系统 步骤分析 需求分析 器件选型绘制原理图(器件连接)PCB布局、布线泪滴、铺铜、添加丝印…...
labview关于文件路径的问题
在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数,最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中,应用程序目录更像是根目录,往下拆分成了各个VI的子目录。 接下来我们来拆…...
72项!湖北省2024年度第二批省级科技计划项目拟立项项目公示!
本期精选 SCI&EI ●IEEE 1区TOP 计算机类(含CCF); ●EI快刊:最快1周录用! 知网(CNKI)、谷歌学术期刊 ●7天录用-检索(100%录用),1周上线; 免费稿件评估 免费匹配…...
神经网络问题之:梯度不稳定
梯度不稳定是深度学习中,特别是在训练深度神经网络时常见的一个问题,其本质涉及多个方面。 一、根本原因 梯度不稳定问题的根本原因在于深度神经网络的结构和训练过程中的一些固有特性。随着网络层数的增加,梯度在反向传播过程中会逐层累积变…...
ORACLE删不掉job,如何解决。
问题: 删掉 NYZSM 时出错: ORA-27478: 作业 “ZHY.NYZSM” 正在运行 ORA-06512: 在 “SYS.DBMS_ISCHED”, line 213 ORA-06512: 在 “SYS.DBMS_SCHEDULER”, line 657 ORA-06512: 在 line 2 1、停止作业: 使用DBMS_SCHEDULER.STOP_JOB过程来…...
可视化建模与UML《活动图实验报告》
你当像鸟飞往你的山。 一、实验目的: 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境: window7 | 10 | 11 EA15 三、实验内容: <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…...
基于 MUSA 的大语言模型推理和服务框架vLLM
1. 引言 vLLM是一个高性能且内存高效的大语言模型推理和服务框架,也是当前业界使用范围最广的大模型推理框架,截至目前github star数28.4k。该框架性能优秀,而且部署容易,使用CUDA/ROCm提供GPU加速能力。但vLLM目前不支持使用摩…...
鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
1. UDP回声服务器简介 回声服务器指的是这样一种服务器,它接受客户端的连接,并且把收到的数据原样返回给客户端,本系列的第2篇文章《鸿蒙网络编程系列2-UDP回声服务器的实现》中基于ArkTS语言在API 9的环境下实现了UDP回声服务器,…...
android-studio-4.2下载 、启动
下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…...
深度学习day2-Tensor 2
六 Tensor常见操作 Tensor:多维数组,用于存储和操作数据 1 获取元素值 data.item():单个元素tensor转为python数值 import torch #标量 xtorch.tensor(1) print(x.item()) #一阶 xtorch.tensor([100]) print(x.item()) #如果输入的数据超过1个&#…...
【Android踩过的坑】14.小米系统TTS无法生效的问题
【Android踩过的坑】14.小米系统TTS无法生效的问题 解决办法: 在AndroidManifest.xml中添加: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"…...
RabbitMQ实现异步下单与退单
前言: 在电商项目中的支付模块也是一个很重要的模块,其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单,也就是第三方支付、数据库扣减、积分增加、等等其他业务操作,等待全部执行完毕后向用户返回成功响应请求。对…...
鸿蒙NEXT开发案例:随机数生成
【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:W…...
nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表
-1. nwjs在低版本ubuntu运行情况 ubuntu16.04运行nw-v0.93或0.89报错找不到NSS_3.30、GLIBC_2.25 uname -a #Linux Asus 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux cat /etc/issue #Ubuntu 16.04.7 LTS \n \l…...
手语识别实战:CNN-LSTM混合架构与轻量化部署指南
1. 项目概述:手语识别不是“翻译”,而是构建一座可触摸的沟通桥梁手语识别这件事,我从2019年第一次在残联康复中心做志愿者时就盯上了。当时一位老师傅用双手比划“苹果”“医院”“谢谢”,而旁边的年轻人盯着手机里刚装的某款APP…...
Unity AI工作流实战指南:从Editor到运行时的稳定集成
1. 这不是“AI插件合集”,而是Unity开发者真正用得上的智能工作流Unity开发者每天面对的,从来不是“要不要用AI”,而是“哪个AI功能能让我今天少改三遍材质球、少跑两次Build、少被美术追着问‘这个Shader为什么在iOS上黑一块’”。我做Unity…...
GESP6级C++考试语法知识(二十五、深度优先搜索(五、DFS终极奥义))
⚔️第五课《DFS终极奥义》——原来算法世界到处都是 DFS!🌟一、故事开始:算法圣殿1、经过前四课。小骑士 DFS 已经成为了:🌟DFS 小勇者!2、但是。算法王国最深处。还有一座:🌟“dfs…...
ESXi 9.0.0 HPE原厂定制版深度解析|专属硬件适配+零报错部署指南,HPE服务器运维最优解
随着vSphere 9.0虚拟化架构全面普及,企业HPE慧与服务器的底层虚拟化部署迎来全新升级需求。普通通用版ESXi镜像在HPE ProLiant、Apollo系列服务器中,常出现网卡不认、RAID驱动缺失、iLO管理异常、硬件兼容报错等问题,严重影响生产部署效率与系…...
超全 PS 快捷键汇总!新手一键收藏终身受用
对于经常使用Photoshop修图、做设计的小伙伴来说,最影响效率的从来不是创意不足,而是频繁点击菜单栏找功能。明明几秒就能完成的操作,却因为不熟悉工具,反复查找按钮、低效操作,大大拖慢修图节奏。熟练掌握PS快捷键&am…...
Pixel 6有锁机保姆级解锁教程:从‘SIM卡不受支持’到完美VoLTE通话(附ADB/Shizuku工具包)
Pixel 6有锁机完全解锁指南:从网络锁到功能优化全攻略 前言 当你从二手市场淘到一台Pixel 6,满心欢喜地插入SIM卡准备使用时,屏幕上却赫然显示"SIM卡不受支持"——这种挫败感我深有体会。作为一款硬件配置出色的设备,Pi…...
车联网TBOX开发实战六,CAN特性
接上篇芯片及系统方案基础,本篇想写个远程控制,但想想整个交互链路较长,涉及到的基础很多,决定先从最基础的介绍一下,CAN,就是与车辆交互的核心总线本篇不做CAN基础的全面讲解,网络上有大篇幅的…...
GEO优化适合什么类型的企业
这是一个非常务实的问题。很多企业主会担心:“GEO这么高大上的东西,是不是只有大品牌才用得上?”答案是:GEO适用于几乎所有希望通过线上渠道获取客户的企业,只是不同体量、不同行业的企业,适配的GEO策略有所…...
免费屏幕标注神器gInk:让你的演示和教学更加生动高效的完整指南
免费屏幕标注神器gInk:让你的演示和教学更加生动高效的完整指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 还在为在线会议时无法直观标注屏幕内容而烦恼…...
从账单明细看Taotoken计费模式的透明与可追溯性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从账单明细看Taotoken计费模式的透明与可追溯性 对于将大模型API集成到产品中的团队而言,成本控制与核算是一个核心的工…...
