Kafka消息不丢失与重复消费问题解决方案总结

在这里插入图片描述

1. 生产者层面

在这里插入图片描述

异步发送与回调处理

  • 异步发送方式:生产者一般使用异步方式发送消息,异步发送有消息和回调接口两个参数。在回调接口的重写方法中,可通过异常参数判断消息发送状态。若消息发送成功,异常参数为null;若发送失败,可记录日志,并重发消息或后期补偿。

重试机制

  • 解决网络抖动问题:针对消息发送失败(如网络抖动),可利用Kafka提供的重试机制,通过配置设置重试次数,解决因网络不稳定导致的消息发送失败问题,确保消息发送成功。

2. Broker层面

在这里插入图片描述

发送确认机制acks

  • acks值含义:ack有三个值(0、1、all),代表broker分区中保存数据的确认情况。
  • ack = 0时,生产者无需broker响应确认就认为消息发送成功,效率最高但消息丢失概率大;
  • ack = 1(默认值),leader副本保存成功后给生产者发送确认,生产者收到确认后认为消息发送成功;
  • ack = all 时,所有副本都成功保存数据后才给生产者发送确认,性能最低但能最大程度保证消息不丢失。
  • 实际生产环境中,最低应设置ack = 1。

3. 消费者层面

在这里插入图片描述

手动提交偏移量

  • 避免自动提交问题:默认情况下消费者每隔五秒自动提交消费偏移量,在重平衡过程中可能导致重复消费或丢失数据。
  • 为解决此问题,需禁用自动提交偏移量功能,改为手动提交。
  • 消费数据时,消费多少就提交多少偏移量,若消费者宕机则不提交,确保偏移量准确,避免重复消费或丢失。

同步加异步组合提交

  • 组合提交优势:Kafka提供了同步提交和异步提交两种方式。同步提交会阻塞,异步提交虽不阻塞但可能因消费失败导致偏移量不准确,所以采用同步加异步组合提交是较好的选择。具体代码为在消费完消息后先设置异步提交,最后在finally代码块中设置同步提交。

在这里插入图片描述

4. 消息重复消费问题

手动提交与幂等方案

  • 解决重复消费步骤:解决消息重复消费问题与解决消费者消息丢失问题类似,第一步也是关闭自动提交偏移量,开启手动提交偏移量,提交方式采用同步加异步。若仍担心消息重复,可增加幂等方案。

在这里插入图片描述


重平衡概念及触发条件

  • 概念:重平衡是指在Kafka消费者组中,当消费者组成员发生变化(如消费者加入或离开)或订阅的主题分区发生变化时,Kafka会重新分配每个消费者负责的分区,以实现负载均衡的过程。
  • 触发条件:消费者组内消费者数量变化(如消费者加入或离开)、订阅主题分区变化、消费者主动发起重平衡请求等情况会触发重平衡。

在这里插入图片描述

重平衡可能导致的问题

  • 重复消费:默认情况下消费者每隔五秒自动提交消费偏移量。若消费者在消费过程中提交偏移量不及时(如已消费到偏移量6,但只提交到3),当发生重平衡后,新接手该分区的消费者会从上次提交的偏移量(3)继续往后消费,导致3 - 6之间的数据重复消费。
  • 数据丢失:若消费者宕机前提交的偏移量大于实际消费的偏移量(如实际消费到1,但偏移量提交到3),新接手的消费者从3继续消费,1 - 2之间的数据就会丢失。

解决重平衡导致问题的方法

  • 手动提交偏移量:禁用自动提交偏移量功能,改为手动提交。在代码中,消费多少数据就提交多少偏移量,如果消费者宕机则不提交,确保偏移量准确,避免重复消费或丢失。
  • 同步加异步组合提交偏移量:Kafka提供了同步提交和异步提交两种方式。同步提交会阻塞,异步提交虽不阻塞但可能因消费失败导致偏移量不准确,所以采用同步加异步组合提交是较好的选择。具体代码为在消费完消息后先设置异步提交,最后在finally代码块中设置同步提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/945734.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

StarRocks 存算分离在得物的降本增效实践

编者荐语: 得物优化数据引擎布局,近期将 4000 核 ClickHouse 迁移至自建 StarRocks,成本降低 40%,查询耗时减半,集群稳定性显著提升。本文详解迁移实践与成果,文末附丁凯剑老师 StarRocks Summit Asia 2024…

微服务-1 认识微服务

目录​​​​​​​ 1 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 2 服务拆分原则 2.1 什么时候拆 2.2 怎么拆 2.3 服务调用 3. 服务注册与发现 3.1 注册中心原理 3.2 Nacos注册中心 3.3 服务注册 3.3.1 添加依赖 3.3.2 配置Nacos 3.3.3 启动服务实例 …

IDEA工具使用介绍、IDEA常用设置以及如何集成Git版本控制工具

文章目录 一、IDEA二、建立第一个 Java 程序三、IDEA 常用设置四、IDEA 集成版本控制工具(Git、GitHub)4.1 IDEA 拉 GitHub/Git 项目4.2 IDEA 上传 项目到 Git4.3 更新提交命令 一、IDEA 1、什么是IDEA? IDEA,全称为 IntelliJ ID…

kafka开机自启失败问题处理

前言:在当今大数据处理领域,Kafka 作为一款高性能、分布式的消息队列系统,发挥着举足轻重的作用。无论是海量数据的实时传输,还是复杂系统间的解耦通信,Kafka 都能轻松应对。然而,在实际部署和运维 Kafka 的…

二维数组综合

第1题 稀疏矩阵 查看测评数据信息 nm矩阵大部分元素是0的矩阵称为稀疏矩阵,假设有k个非0元素,则可把稀疏矩阵用K3的矩阵简记之,其中第一列是行号,第二列是列号,第三列是该行、该列下的非0元素的值。如:…

STM32-笔记20-测量按键按下时间

1、按键按下的时间-思路 我们先检测下降沿信号,检测到以后,在回调函数里切换成检测上升沿信号,当两个信号都检测到的时候,这段时间就是按键按下的时间,如图所示:>N*(ARR1)CCRx的值 N是在这段时间内&…

【网络协议】路由信息协议 (RIP)

未经许可,不得转载。 路由信息协议(Routing Information Protocol,简称 RIP)是一种使用跳数(hop count)作为路由度量标准的路由协议,用于确定源网络和目标网络之间的最佳路径。 文章目录 什么是…

PHP后执行php.exe -v命令报错并给出解决方案

文章目录 一、执行php.exe -v命令报错解决方案 一、执行php.exe -v命令报错 -PHP Warning: ‘C:\windows\SYSTEM32\VCRUNTIME140.dll’ 14.38 is not compatible with this PHP build linked with 14.41 in Unknown on line 0 解决方案 当使用PHP8.4.1时遇到VCRUNTIME140.dll…

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述:在blender中合并的模型导出为glb,在threejs中导入仍显示多个mesh,并不是统一的整体,导致需要整体高亮或者使用DragControls等不能统一控制。 原因:模型有多个材质,在blender中合并的时候,…

0xc0000020错误代码怎么处理,Windows11、10坏图像错误0xc0000020的修复办法

“0xc0000020”是一种 Windows 应用程序错误代码,通常表明某些文件缺失或损坏。这可能是由于系统文件损坏、应用程序安装或卸载问题、恶意软件感染、有问题的 Windows 更新等原因导致的。 比如,当运行软件时,可能会出现类似“C:\xx\xxx.dll …

wangEditor富文本插件在vue项目中使用和媒体上传的实现

wangEditor是前端一个比较流行的简洁易用,功能强大的前端富文本编辑器,支持 JS Vue React,提供了很多丰富的功能,下面手把手教你实现wangWditor富文本插件在vue项目中配置,保存、图片上传等功能。无脑ctrlc即可 基本功…

MySQL root用户密码忘记怎么办(Reset root account password)

在使用MySQL数据库的的过程中,不可避免的会出现忘记密码的现象。普通用户的密码如果忘记,可以用更高权限的用户(例如root)进行重置。但是如果root用户的密码忘记了,由于root用户本身就是最高权限,那这个方法…

C语言学习笔记(1)

在学习前,需要有一定的C语言基础。不必很深入,只需要知道函数,头文件,指针,数组等的概念就可以,但并非0基础笔记。 由于写到后面,不好编辑了,决定分成多篇写,请按编号学…

使用uWSGI将Flask应用部署到生产环境

使用uWSGI将Flask应用部署到生产环境: 1、安装uWSGI conda install -c conda-forge uwsgi(pip install uwsgi会报错) 2、配置uWSGI 在python程序的同一文件夹下创建 uwsgi.ini文件,文件内容如下表。 需要按照实际情况修改文件名称…

集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!

本文将详细介绍 Docusign 与蓝凌 EKP 的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在当今数字化办公环境中,企业对于提高工作效率和提升用户体验的需求日益迫切。蓝凌…

CMS漏洞靶场攻略

DeDeCMS 环境搭建 傻瓜式安装 漏洞一:通过文件管理器上传WebShel 步骤⼀:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过⽂件管理器上传php文件获取webshell 登陆网站后台 步骤二:登陆到后台点击 【核心】 --》 【文件式…

1、Jmeter、jdk下载与安装

1、访问官网,点击下载Jmeter http://jmeter.apache.org/ 2、在等待期间,下载对应的Java https://www.oracle.com/cn/java/technologies/downloads/#jdk23-windows 3、全部下载好,先安装JDK ![在这里插入图片描述](https://i-blog.csdnimg…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 3.1.2 基于注意力的解释(Attention-Based Explanation) 注意力机制可以揭示输入数据中各个部分之间的关系&#…

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话 最近一篇文章还是在11月30日写的,好长时间没有打卡了。最近工作上的事情特别多,主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed,后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…

使用rknn进行yoloV8部署(C++)

文章目录 RKNN导出ONNX导出RKNNC++部署环境配置参考RKNN RKNN(Rockchip Neural Network)是由 Rockchip(瑞芯微电子)公司开发的深度学习框架,旨在提供高效、优化的神经网络推理(inference)能力,支持各种类型的神经网络模型的加速运行,特别是针对 Rockchip 的 ARM 处理…