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代码块中设置同步提交。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 3312. 查询排序后的最大公约数

题目如下 错误示范: 暴力做法遍历nums数组分别求公约数 using namespace std; int gcd(int a,int b) {int a1 a , b1 b;if(a < b) {a1 b;b1 a;}if(a1 % b1 0) return b1;return gcd(a1 % b1,b1);}//logn vector<int> gcdValues(vector<int>& nums, …

VuePress搭建个人博客

VuePress搭建个人博客 官网地址: https://v2.vuepress.vuejs.org/zh/ 相关链接: https://theme-hope.vuejs.press/zh/get-started/ 快速上手 pnpm create vuepress vuepress-starter# 选择简体中文、pnpm等, 具体如下 .../19347d7670a-1fd8 | 69 .../19…

Junit4单元测试快速上手

文章目录 POM依赖引入业务层测试代码Web层测试代码生成测试类文件 在工作中我用的最多的单元测试框架是Junit4。通常在写DAO、Service、Web层代码的时候都会进行单元测试&#xff0c;方便后续编码&#xff0c;前端甩锅。 POM依赖引入 <dependency><groupId>org.spr…

ABB RobotStudio学习记录(二)SmartGripper模拟

SmartGripper模拟 准备具体操作 准备 名称版本Robot Studio6.08 为了简化开发&#xff0c;我研究了 ABB 机械臂 SmartGripper 在 ABB RobotStudio 中的模拟操作。 具体操作 主要分3个步骤&#xff1a; 修改机械装置&#xff0c;设置Pose; 我这里使用的ABB YuMi&#xff0c…

terminal_学习

参考&#xff1a; 让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南 https://sspai.com/post/55176MAC 终端美化教程&#xff08;来个全套 &#xff09;https://blog.csdn.net/weixin_42326144/article/details/121957795 x.1 zsh做美化&#xff08;安装oh…

音视频入门知识(四):封装篇

⭐四、封装篇 H264封装成mp4、flv等格式&#xff0c;那为什么需要封装&#xff1f; ​ h264也能播放&#xff0c;但是按照帧率进行播放&#xff0c;可能不准 ★FLV **FLV&#xff08;Flash Video&#xff09;**是一种用于传输和播放视频的容器文件格式。FLV 格式广泛应用于流媒…

使用 ASP.NET Core wwwroot 上传和存储文件

在 ASP.NET Core 应用程序中上传和存储文件是用户个人资料、产品目录等功能的常见要求。本指南将解释使用wwwroot存储图像&#xff08;可用于文件&#xff09;的过程以及如何在应用程序中处理图像上传。 步骤 1&#xff1a;设置项目环境 确保您的 ASP.NET 项目中具有必要的依…

S2-007-RCE(CVE-2012-0838)--vulhub

S2-007-RCE(CVE-2012-0838) 攻击者可以利用不安全的输入数据&#xff0c;构造OGNL表达式&#xff0c;最终导致服务器执行恶意命令。特别是在没有适当的输入验证或配置的情况下&#xff0c;攻击者可以在 HTTP 请求中嵌入 OGNL 表达式&#xff0c;触发远程代码执行。 Affected …

tar.gz压缩文件在linux上解压异常问题:gzip:stdin:invalid compressed data

1. 异常描述 将一个tar.gz压缩文件从windows拷贝到linux上之后&#xff0c;使用命令&#xff1a;tar -zxvf xxx.tar.gz压缩包时出现如下提示信息&#xff1a; 2. 异常分析 压缩包在下载的时候没有下载完整&#xff0c;重新下载一个试试。

UE5材质节点CameraDepthFade

相机深度消失&#xff0c;Fade Length相机离物体位置&#xff0c;Fade Offset消失偏移 可以让物体随着相机距离消失 相机深度消失 边缘自发光

Python机器学习笔记(十五、聚类算法的对比和评估)

用真实世界的数据集对k均值、凝聚聚类和DBSCAN算法进行比较。 1. 用真实值评估聚类 评估聚类算法对真实世界数据集的聚类结果&#xff0c;可以用调整rand指数ARI和归一化互信息NMI。 调整rand指数 &#xff08;adjusted rand index&#xff0c;ARI&#xff09;和归一化互信息…

SAP PP bom历史导出 ALV 及XLSX 带ECN号

bom总数 104W PS超过XLSX上限 &#xff0c;那就分文件 *&---------------------------------------------------------------------* *& Report ZRPT_PP_BOM_HIS_ECN *&---------------------------------------------------------------------* *& tcode:zpp0…

《代码随想录》Day20打卡!

《代码随想录》二叉树&#xff1a;二叉搜索树的最近公共祖先 本题的完整题目如下&#xff1a; 本题的思路如下&#xff1a; 1.之前写过一个二叉树的最近公共祖先&#xff0c;本题相比于另一道题&#xff0c;不同是本题是二叉搜索树&#xff0c;有一些可用的性质。 2.本题使用递…

初识MySQL · 库的操作

目录 前言&#xff1a; 增 有关编码 删 查 改 前言&#xff1a; 由前文可得&#xff0c;MySQL是目前主流的数据库&#xff0c;mysql是客户端&#xff0c;mysqld是一种网络服务&#xff0c;mysqld是一种数据库服务&#xff0c;而对于数据库来说&#xff0c;是一种存储数据…

Idea创建JDK17的maven项目失败

Idea创建JDK17的maven项目失败 Error occurred during initialization of VM Could not find agent library instrument on the library path, with error: Can’t find dependent libraries Possible solution: Check your maven runner VM options. Open Maven Runner setti…

Go-知识 模板

Go-知识 模板 1. 介绍2. Text/template 包3. Html/template 包4. 模板语法4.1 模板标签4.2 添加注释4.3 访问变量4.4 访问方法4.5 模板变量4.6 访问函数4.7 数据渲染4.8 条件判断4.9 循环遍历4.10 嵌入子模板4.11 局部变量4.12 输出字符串4.13 预定义的全局函数4.14 比较函数 1…

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中&#xff0c;租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘&#xff0c;我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此&#xff0c;针对这些需求&#xff0c;完善租赁小程序…

基础数据结构--二叉树

一、二叉树的定义 二叉树是 n( n > 0 ) 个结点组成的有限集合&#xff0c;这个集合要么是空集&#xff08;当 n 等于 0 时&#xff09;&#xff0c;要么是由一个根结点和两棵互不相交的二叉树组成。其中这两棵互不相交的二叉树被称为根结点的左子树和右子树。 如图所示&am…

shell学习变量(二)

这里写目录标题 一、概念1、环境变量2、本地变量3、系统变量 二、环境变量三、本地变量四、系统变量五、定义变量规则1、命名规则2、定义方式3、unset命令&#xff1a;删除变量 一、概念 1、环境变量 环境变量指的是再当前进程有效&#xff0c;并且能够被子进程调用&#xff…

自动驾驶3D目标检测综述(六)

停更了好久终于回来了&#xff08;其实是因为博主去备考期末了hh&#xff09; 这一篇接着&#xff08;五&#xff09;的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 &#xff08;一&#xff09;…