系列十七(面试)、请你谈谈RocketMQ的消息丢失问题

一、RocketMQ的消息丢失问题

1.1、概述

        生产环境中为了保证服务的高可用,一般情况下都是采用集群的方式,RocketMQ也不例外,另外现在企业级的开发基本都是分布式+微服务的模式,这就存在着跨网络传输数据的问题,而网络传输不可避免的会出现消息丢失的情况(网络传输不靠谱),这也是RocketMQ消息丢失的主要原因,当然还有其他场景导致消息丢失,具体情况请看下面的分享!

1.2、架构图

1.3、消息丢失的原因

        从上边的架构图不难看出,RocketMQ中消息丢失主要发生在以下场景,即:

(一)生产者跨网络传输数据到Broker时发生数据丢失;

(二)Broker集群内部存在master节点向slave节点同步数据时发生数据丢失;

(三)消费者跨网络从Broker消费消息时发生数据丢失;

(四)另外,MQ存盘时也是先写入操作系统的缓存PageCache中,然后再由操作系统异步的将消息写入磁盘,在操作系统将PageCache中的消息写入到磁盘的过程中有个时间差,如果此时恰巧服务宕机,PageCache中的数据还没有来得及写入磁盘中,也会产生消息丢失。

1.4、如何解决消息丢失问题

(一)生产者端不丢失消息解决方案

        采用同步方式进行发送,生产者端发送完消息给Broker后,它需要等待Broker的响应,如果Broker返回的状态不是SEND_OK,那么Producer可以进行重试,原理图如下:

        

        对于重要的数据可以采用同步方式,可以做到零丢失数据,但与此同时会影响一部分性能。

(二)存储端不丢失消息解决方案

        如果要保证存储端的消息不丢失,确保消息能够持久化到磁盘,可以从刷盘机制进行考虑。刷盘机制分为同步刷盘和异步刷盘,对于异步刷盘来说,只要消息写入PageCache缓存,就返回一个成功的ack响应,这样提高了MQ的性能,但是这时候如果机器恰巧断电了,就会导致刷盘失败,丢失消息。对于同步刷盘来说,生产者消息发过来时,只有消息持久化到磁盘,Broker才会返回一个成功的ack响应,进而保证消息不丢失,但与此同时会影响一部分性能,原理图如下:

同步复制:

        另外Broker一般是集群部署的,有master节点和slave从节点,消息到达Broker端,只有主节点和从节点都写入成功,才反馈成功的ack给生产者,这就是同步复制,它保证了消息不丢失,但与此同时会影响一部分性能,原理图如下:

异步复制:

        只要主节点写入master成功,就返回成功的ack,速度快是显著的特点,但是存在slave写入失败导致消息丢失的问题,原理图如下:

(三)消费者端不丢失消息解决方案

        Consumer先将消息pull到本地,消费完成后再向Broker返回ack,通常消费消息的ack机制一般分为两种思路,分别如下:

        a、先提交后消费:可以解决重复消费的问题,但是可能存在消息还没来得及消费然后服务器宕机的情况,导致消息丢失;

        b、先消费后提交:需要Consumer通过幂等性的逻辑操作,避免消息被重复消费;

 

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

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

相关文章

【PTA】L1-016 验证身份(C++)

题目链接 : 题目要求: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5&#xff0…

【七】【C语言\动态规划】最大子数组和、环形子数组的最大和、乘积最大子数组,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

python脚本抢各大平台大额优惠卷

文章目录 python脚本抢各大平台大额优惠卷写在前面准备阶段一、所需工具二、ChromeDriver下载教程 三、Seleuinm安装1、打开cmd,输入如下命令 开始抢券淘宝脚本京东抢购脚本 python脚本抢各大平台大额优惠卷 写在前面 当电商平台上演盛大的购物狂欢时,如…

SpringBoot3 基础特性

1. SpringApplication 1.1. 自定义 banner 类路径添加banner.txt或设置spring.banner.location就可以定制 banner推荐网站:Spring Boot banner 在线生成工具,制作下载英文 banner.txt,修改替换 banner.txt 文字实现自定义,个性化…

数据驱动与数据安全,自动驾驶看得见的门槛和看不见的天花板

作者 |田水 编辑 |德新 尽管心理有所准备,2023年智能驾驶赛道的内卷程度还是超出了大多数人的预期。 这一年,汽车价格战突然开打,主机厂将来自销售终端的价格压力,传导到下游智驾供应商,于是,市面上出现…

医院云HIS系统源码,saas多医院版,适用于专科医院、集团医院、基层医院

医院云HIS系统源码,自主研发,自主版权,电子病历病历4级 系统概述: 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统…

数据结构:单调栈

1.单调栈 单调栈是一种数据结构,其中存放的数据应该是有序的,所以单调栈也有单调递减栈和单调递增栈 单调递增栈:栈顶到栈底的元素大小是从小到大 单调递减栈:栈顶到栈底的元素大小是从大到小 单调栈主要就是用来求一个给定序列中…

【unity3D-粒子系统】粒子系统主模块-Particle System篇

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍:粒子系统的主模块,是必需的模块&#x…

ESP8266 ESP-01/01s 工作模式与固件下载烧录接线

注意点: ESP8266 ESP-01与 ESP8266 ESP-01s接线类似 。本文使用的是ESP8266 ESP-01 WIFI模块,详细信息见如下图片。本文固件下载的是ESP8266 的MQTT固件,下载其它固件流程一致。本文使用的是杜邦线连接面包板来进行使用,与使用开发…

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

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

YOLOv8可视化:引入多种可视化CAM方法,为科研保驾护航

💡💡💡本文内容:调用pytorch下的CAM可视化库,支持十多种可视化方法,打开“黑盒”,让YOLOv8变得相对可解释性 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

Vue Echarts 多折线图只有一条X轴(合并X轴数据并去重排序) - 附完整示例

echarts:一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档:Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&am…

经验分享:构建知识库管理系统只需要这几步

导语: 在当今信息爆炸的时代,构建一个高效的知识库管理系统对于企业来说至关重要。一个好的知识库管理系统可以帮助企业集中管理和共享知识和信息,提高团队的协作效率和创新能力。本文将分享构建知识库管理系统的几个关键步骤,帮…

[Linux] MySQL数据库的备份与恢复

一、数据库备份的分类和备份策略 1.1 数据库备份的分类 1)物理备份 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。 物理备份方法: 冷备份(脱机备份) :是在关闭数据库的时候进…

3D视觉方案的优势

随着机器视觉在工业领域的应用逐渐深入,传统的 2D 视觉方案已经趋向成熟,应用局限性也已经显现出来。 2D 视觉方案易受照明条件影响,一致性和稳定性难以保证,且无法实现三维高精度测量和定位, 3D 视觉方案应运而生&…

奇富科技跻身国际AI学术顶级会议ICASSP 2024,AI智能感知能力迈入新纪元

近日,2024年IEEE声学、语音与信号处理国际会议ICASSP 2024(2024 IEEE International Conference on Acoustics, Speech, and Signal Processing)宣布录用奇富科技关于语音情感计算的最新研究成果论文“MS-SENet: Enhancing Speech Emotion Re…

如何发送大型文件 ---- 分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,比如QQ邮箱需要付费来进行中转的扩容,下面我将会介绍一种分卷压缩的方法来传送较大的压缩包给对方 使用7-zip软件进行分卷压缩 如果有7-zip压缩软件直接跳过这一步 7-zi…

利用Milvus Cloud和LangChain构建机器人:一种引人入胜且通俗易懂的方法

一、引言 机器人已经深入我们的日常生活,从家庭服务到工业生产,再到医疗和运输等领域。然而,这些机器人往往需要复杂的算法和数据处理技术才能有效地执行任务。在这个过程中,人工智能(AI)和机器学习&#…

Spring Boot快速搭建一个简易商城项目【一展示商城首页篇】

前言:今天我来使用Spring Boot快速搭建一个简易商城项目以下是相关的思路流程,如果有更好的思路,欢迎大佬评论留言!!! 一,实现思路: 创建 Spring Boot 项目: 使用 Spring…

Hikvision SPON IP网络对讲广播系统存在命令执行漏洞CVE-2023-6895 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. Hikvision SPON IP网络对讲广播系统简介 微信公众…