Kafka、RocketMQ、RabbitMQ消息丢失可能存在的地方,以及解决方案

这里主要对比:Kafka、RocketMQ、RabbitMQ
介绍一下消息生产、存储、消费三者的架构形式。
在这里插入图片描述

消息丢失可能存在的场景:

情况一: 生产者发送给MQ的过程消息丢失

在写消息的过程中因为网络的原因,还没到mq消息就丢失了;或者是到了mq,还没返回确认收到消息,消息丢失了,怎么处理?

情况二: Broker存储消息丢失

mq的master节点在接受到消息后,还没来得及同步给slave上面的follower副本,master节点直接宕机了,消息还在内存中,丢失消息了,怎么处理?

情况三: 消费者拉取消息后,消息丢

消费者拉取到了消息,但是还没来得及消费,消费者实例挂掉了,mq以为这条消息已经消费了,怎么处理?

针对“情况一”的解决思路:

方法1:

AMQP很多都支持事务机制,那是不是说我们可以生产者采用同步模式给mq发送消息的过程,打开事务机制,发送一条,mq接受到后返回确认信息后再发送下一条消息?这样肯定行不通的,会使生产者的吞吐量直线下降。

方法2:

对于 RabbitMQ:
它提供了一个异步confirm机制,发完了生产者就不用管了,rabbitmq接收到消息会回调生产者的本地一个接口告诉你消息接收成功了,如果rabbitmq在接收消息是报错了,就会回调这个接口,告诉你这个消息接收失败了,可以重试发送了,不会阻塞下一条消息的发送。

对于RocketMQ:它提供了一个异步接收模式, Async
API,Producer只需要把消息发送给mq就可以。mq处理完成之后,调用producer定义好的回调函数,就可以确认是否收到对应messageID的回调确认消息,没有收到就触发retry机制。
对于Kafka:它也提供了异步(async)处理模式,send()方法会返回Futrue对象,通过调用Futrue对象的get()方法,等待直到结果返回。

针对“情况二”MQ把消息弄丢了的解决思路:

1、必须开启持久化,就是消息写入mq后就会刷盘,就算mq自己挂掉了,恢复之后也会读取存储的数据,一般不会丢失,除非还没来得及持久化就挂掉了,这种情况很少,概率极低。
2、配合producer的confirm机制,只有消息被持久化或者大多数副本同步完成后,才返回ack;
3、kafka消费者丢失消息,跟rabbitmq处理机制是一样的,如:kafka
broker自己把消息给丢失了,生产者将消息发送给partion
leader,但是接收完,leader就宕机了,还没同步给follower,而马上另外的partion
follower被选举成了leader,这一块数据丢失了,怎么处理?必须将kafka的副本参数设置大于1,就是说至少有2个副本;kafka还需要设置副本leader至少感知不到一个follower挂掉了,才算leader挂掉了,才能重新选举;broker副本的follower全部同步成功时,才能算生产者写入消息队列写入成功【这样可以保证一条不丢】。

针对“情况三”消费者拉取消息后,消息丢失的解决思路:

1、消费者丢失消息:一般是消费者打开了autoAck的机制,自动提交,但还在处理中,消费者系统宕机了,mq以为消费完了,造成了消费者丢失消息,怎么处理?
解决办法:关闭autoAck,每次处理完了再提交ack/offset,如果还没处理完就宕机了,长时间收不到ack,mq也会重新将这条消息分配给其他的消费者去处理。但是此时你需要自己保证消息的幂等性,因为如果消费者将消息已经消费了,但是返回给mq的确认信息失败了,mq以为你没消费,它会把消息发送给给另外的消费者,或者等该实例恢复后再次发送,引起消息的重复消费,此时,你可以将messageID做唯一键处理。

如果保证消息一条不丢,必须关闭消息过期清理的机制,否则消息积压会触发消息清理的机制,也会造成消息丢失。

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

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

相关文章

为什么要运营海外社媒?海外云手机能发挥什么作用?

基于海外社媒在全球范围内拥有的大量流量,海外社媒运营成为了品牌推广、内容创作和用户互动的重要途径。本文将探讨海外社媒运营的重要性,并介绍海外云手机在这一过程中的卓越帮助。 海外社媒运营的重要性 首先,海外社媒运营有助于企业扩大品…

搭建Vue前端项目的流程

1、安装nodejs 测试安装是否成功 $ npm -v 6.14.16 $ node -v v12.22.122、全局安装npm install -g vue/cli,后续会使用到vue命令 $ vue --version vue/cli 5.0.8使用vue create demo_project_fe命令创建项目,使用箭头键来选择,确认使用回车…

Linux内核中断

Linux内核中断 ARM里当按下按键的时候,他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作:1)判断中断的序号;2)处理中断;3)清除中…

macOS系统下载安装PyCharm社区版本的流程(详细)

第一步 进入PyCharm官网,链接:Get Your Educational Tool - JetBrains 第二步 选择下拉框,根据自己的电脑芯片选择下载版本(芯片查看位置:设置-通用-关于本机)然后点击Download按钮 ​​​​​​​ -- 第…

XUbuntu22.04之删除多余虚拟网卡和虚拟网桥(二百零四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

基础概念、思维习惯、知识图谱

说明: 刚开始写本文,因为本文涉及的内容会很多,部分内容要写清楚不容易,所以提前声明,现在只是第一阶段,先收集零散的内容,第二阶段再大刀阔斧地重构目录。 一,基础概念 1&#xf…

win桌面圣诞小插件分享

最终效果 文章目录 最终效果前言下载效果更多完结 前言 圣诞到了,最近有小伙伴问我有没有一些桌面圣诞小插件可以分享一下,所以我就特地去寻找了一些,感觉效果还不错,所以分享出来 下载 链接:https://pan.baidu.com…

css 设置鼠标覆盖显示菜单

鼠标覆盖到“全部分类”效果如下 鼠标放到“精品推荐”效果如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

猫冻干哪个牌子好又便宜?性价比高的5款主食冻干猫粮推荐

各位铲屎官都知道猫天性是食肉动物&#xff0c;无肉不欢的。而冻干猫粮对于猫咪来说是最好还原猫咪食肉天性的食物&#xff0c;不仅可以当成猫咪的主食&#xff0c;也可以用来给猫咪当成零食&#xff0c;帮助猫咪补充营养。冻干猫粮是经过真空冷冻干燥处理的鲜肉&#xff0c;能…

DRF从入门到精通五(路由组件、认证组件、权限组件、频率组件及认证、权限源码分析)

文章目录 一、路由组件REST framework提供了两个routeraction装饰器 二、认证组件(Authentication)三、权限组件(Permissions)内置权限类 四、频率组件(Throttling)五、权限组件源码分析六、认证组件源码分析 一、路由组件 对于视图集ViewSetMixin&#xff0c;我们除了可以自己…

python+selenium 定位到元素,无法点击的解决方法

今天小编就为大家分享一篇pythonselenium 定位到元素,无法点击的解决方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22)…

github新建仓库推送代码教学

之前一直用gitee&#xff0c;准备转到github。因为一步一步尝试。如果是新手或许文章会有帮助 点击 new 创建 拉代码 Idea 打开 复制一个 pom 文件作为 maven 管理 提交代码 不出意外的出意外&#xff0c;报错 点击authorize JetBrains 失败 分析问题 本质就是没有…

搭建一个高效的Python开发环境

“工欲善其事&#xff0c;必先利其器”&#xff0c;这里我们来搭建一套高效的 Python 开发环境&#xff0c;为后续的数据分析做准备。 关于高效作业&#xff0c;对于需要编写 Python 代码进行数据分析的工作而言&#xff0c;主要涉及两个方面。 1. 一款具备强大的自动完成和错…

如何快速获取抖音新用户/用户信息

一、快速获取抖音用户信息意味着什么&#xff1f; 抖音是一款热门的短视频社交平台&#xff0c;拥有海量用户和高度活跃的商业生态。用户逐渐增多&#xff0c;庞大的用户也意味着隐藏着庞大的市场和商机&#xff0c;用户的偏好、关注点等信息都时刻影响着商业的效益&#xff0…

推特(Twitter)蓝V

点击个人订阅 这里需要一张visa卡才可以订阅&#xff0c;点击获取 订阅成功

2024 年混合云:趋势和预测

混合云环境对于 DevOps 团队变得越来越重要&#xff0c;主要是因为它们能够弥合公共云资源的快速部署与私有云基础设施的安全和控制之间的差距。这种环境的混合为 DevOps 团队提供了灵活性和可扩展性&#xff0c;这对于大型企业中的持续集成和持续部署 (CI/CD) 至关重要。 在混…

GitHub的2FA验证问题解决工具

文章目录 前言认识2FA开源工具使用&#xff1a;AuthenticatorPro获取AuthenticatorPro的安卓APK如何使用 参考文章 前言 打开GitHub跳出来这个提示&#xff0c;需要进行验证&#xff1a; 如何解决呢&#xff1f;方案有很多&#xff0c;我们可以使用开源的一个工具&#xff1a;…

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

基于机器视觉工业相机的Raw图像和Bitmap图像的保存和转换(C#代码,UI界面版)

基于机器视觉工业相机的Raw图像和Bitmap图像的保存和转换&#xff08;C#代码&#xff0c;UI界面版&#xff09; 工业相机图像格式工业相机实现Raw图像和Bitmap图像的保存和转换的技术背景在相机SDK中获取图像转换图像的代码分析工业相机回调函数里保存Bitmap图像数据工业相机图…

Sectigo的OV多域名通配符证书与通配符证书

Sectigo的OV多域名通配符SSL证书和通配符SSL证书都可以同时保护多个域名记录&#xff0c;但是Sectigo的OV多域名通配符SSL证书并不是多域名SSL证书加通配符SSL证书&#xff0c;而是多个泛域名&#xff0c;并不包括泛域名的主域名。今天就随SSL盾小编了解Sectigo旗下的OV多域名通…
最新文章