MQ怎么保证消息不丢失?

2023-10-30

在我们做业务时候很多时候需要用到消息队列,那消息队列中是怎么保证消息的可靠性的?

我们今天学习目前主流的消息队列是怎么保证消息可靠性?
1、RocketMQ 2、Kafka 3、RabbitMQ

RocketMQ

  • 持久化存储:RocketMQ 使用 CommitLog将消息以追加的方式写入磁盘,并使用内存映射技术提高读写效率。这样即使在异常情况下(如服务器宕机),消息也能够被恢复,从而确保消息的持久化存储。
  • 主从同步复制:RocketMQ 支持主从模式,在主节点写入消息后,会异步地将消息复制到一定数量的从节点。这样即使主节点发生故障,从节点也可以继续提供服务。主从同步复制可以提高消息的可用性和可靠性。
  • 同步刷盘:RocketMQ 提供了同步刷盘的机制。当消息被写入 CommitLog 时,可以选择将数据刷写到磁盘并等待刷盘完成的确认。这样可以确保消息在写入磁盘后的持久化存储,提高数据的可靠性。
  • 高可用架构:RocketMQ 支持搭建高可用的架构,可以通过部署多个 Broker 节点来实现数据的冗余备份。当某个 Broker 节点发生故障时,其他节点可以继续提供服务,确保消息的可用性和可靠性。
  • 消息重试机制:RocketMQ 提供了消息重试的机制。当消息发送失败或者消费失败时,RocketMQ 会根据配置进行重试,保证消息的可靠传输和消费。可以通过设置重试次数、重试间隔等参数来灵活地控制消息的重试策略。
  • 消息回溯:RocketMQ 支持消息回溯功能,可以根据时间点或者偏移量来查询历史消息。这对于消息丢失或者消息错误处理等场景非常有用,可以保证数据的可靠性和一致性。

Kafka

  • 持久化存储:Kafka 将消息以追加日志的方式存储在磁盘上,所有的消息都会被持久化保存。即使在消息被消费之后,Kafka 仍会保留消息的副本,以便进行数据备份和故障恢复。
  • 复制机制:Kafka 使用副本机制实现数据的冗余备份。每个分区都可以配置多个副本,其中一个副本作为领导者(Leader),负责处理读写请求,其他副本作为追随者(Follower),负责备份数据。当领导者副本失效时,Kafka 会从追随者中选举新的领导者,确保数据的可用性和可靠性。
  • 同步复制和异步复制:Kafka 支持同步复制和异步复制两种模式。在同步复制模式下,消息生产者会等待所有的副本都成功写入数据后才认为消息发送成功,确保数据的可靠性。在异步复制模式下,消息生产者将消息发送到领导者副本,并立即返回确认,不等待所有副本的写入确认。异步复制可以提高消息发送的吞吐量,但可能会带来一定的数据丢失风险。
  • ISR(In-Sync Replicas)机制:Kafka 通过 ISR 机制来保证数据的一致性。ISR 是指与领导者副本保持同步的一组副本。只有处于 ISR 中的副本才有资格被选举为新的领导者,确保数据的一致性和可靠性。如果某个副本与领导者副本的同步延迟过大或无法跟上领导者的写入速度,Kafka 会将其移出 ISR,防止数据不一致。
  • 重试机制:Kafka 提供了消息重试的机制。当消息发送失败或者消费失败时,Kafka 允许进行消息重试,以确保消息的可靠传输和消费。可以通过设置重试次数、重试间隔等参数来调整重试策略,保证消息的可靠性。
  • 持久化保证:Kafka 提供了多种持久化保证方式,如设置副本因子、写入到多个磁盘目录等。这些机制可以在单个节点或整个集群发生故障时保证数据的可靠性和持久化。

RabbitMQ

  • 持久化队列和消息:默认情况下,RabbitMQ 的队列和消息都是持久化的。当声明一个队列时,可以将其标记为持久化,这样即使在服务器重启或者崩溃的情况下,队列和消息也能够恢复。
  • 发布者确认(Publisher Confirms):RabbitMQ 支持发布者确认机制,也称为生产者确认。当消息发送到交换器后,生产者可以选择等待交换器的确认消息。如果确认消息表示消息已经被可靠地传递到了队列,生产者可以认为消息发送成功,否则可以进行重试或其他处理。
  • 消费者确认(Consumer Acknowledgements):在消费者接收和处理消息后,可以向 RabbitMQ 发送确认消息,通知 RabbitMQ 已经成功处理了消息。RabbitMQ 可以根据消费者的确认消息来判断是否将消息标记为已消费,并将其从队列中删除。这样可以确保消息只有在被消费者正确处理后才被认为是已消费的。
  • 消息持久化和交换器持久化:除了持久化队列和消息外,还可以选择将交换器设置为持久化。持久化交换器可以确保交换器在服务器重启或崩溃后仍然存在,从而保证消息的可靠路由。
  • 备份交换器(Backup Exchange):RabbitMQ 提供了备份交换器机制。备份交换器可以在主交换器无法路由消息时,将消息转发到备份交换器中。通过设置备份交换器,可以确保在主交换器发生故障时,消息不会丢失,从而提高消息的可靠性。
  • 消息重试机制:如果消息在消费过程中发生异常或者处理失败,消费者可以选择进行消息重试。通过合适的重试策略,可以确保消息被正确地处理。
  • 镜像队列(Mirrored Queue):RabbitMQ 提供了镜像队列的机制。镜像队列将队列的消息复制到多个节点上,以提供数据冗余和高可用性。这样即使某个节点发生故障,仍然可以从其他节点获取消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MQ怎么保证消息不丢失? 的相关文章

随机推荐

  • ChatGPT怎么用?这几个技巧让你快速完成各种工作!来吧展示!

    ChatGPT成为全球热议话题 月活用户突破1亿 如何利用ChatGPT快速完成工作 小编分享使用技巧 ChatGPT 一 ChatGPT能够做什么 想要利用ChatGPT完成工作 首先需要了解它是一款什么样的AI工具 以及它能够为您提供哪
  • vue-cli3 less全局变量

    首先一定要确定安装了vue cli3X以上 接着直接运行这哥命令就可以了 vue add style resources loader 如果上面的没反应 请再一次确实是不是升级到了vue cli3 x以上 如果安装失败或者提示错误 可以试着
  • Hocate Ajax 框架介绍

    hocate AJAX框架参照了目前很多框架的设计思路 汲取各个框架其中的优点 摒弃了一些操作和编码的不便性 旨在提供一个方便快捷易编码的ajax框架 1 java对象到JSON对象的自动映射 2 对象自动JSON化 可以在页面中直接调用
  • LCLFramework框架 1.1 Pre-Alpha 源码公布

    使用开发框架的好处 1 框架在技术上为软件系统提供了完整的模式实践2 框架为团队提供了合理可行的软件开发过程模式3 框架的应用大大提高了团队的开发效率 团队只需要关注与领域相关的业务实现 而无需关注具体的技术实现4 框架的应用大大降低了出现
  • Web页面广告设计

    本文主要介绍如何实现一个能够自行删除 同时在页面上固定位置显示广告的Web页面设计的方法 一 需求分析 我们需要在Web页面中添加一个广告 要求该广告显示在页面的侧边 占据三屏高度 同时该广告页面能够自行删除 且需要弹出一个位于页面右下角的
  • 1流明等于多少lux_1勒克斯=多少流明

    展开全部 1勒克斯 1流明的光通量均匀分布在1平方62616964757a686964616fe58685e5aeb931333366303832米面积上的照度 即 1lux 1lm 平方米 勒克斯是照度的单位 符号为lux或lx 流明是光
  • 26进制

    问题 在Excel 2003中 用A表示第1列 B表示第2列 Z表示第26列 AA表示第27列 AB表示第28列 以此类推 请写一个函数 输入用字母表示的列号编码 输出它是第几列 思路 这是一道关于进制的题目 其本质是把十进制数字用A Z表
  • Python openCV qt.qpa.plugin: could not find the qt platform plugin "cocoa" in "" 在Mac上的解决方案详解

    这是一个不断踩坑的过程 首先 我开始的诉求是希望可以利用 openCV 实时显示电脑摄像头获取的内容 开始用了 cv2 imshow 结果不行 报错 qt qpa plugin Could not find the Qt platform
  • Windows C盘清理之用户数据清理记录

    今天 突然发现C盘空间只剩余3 4G了 我的电脑总共500G 化了6个分区 如下 80G给了C盘 系统盘 100G给了D盘 软件盘 200G给了E盘 虚拟机盘 20G给F盘 workspace盘 20G给G盘 文档盘 其余给了H盘 MISC
  • 超乎想像的宇宙

    转至youtube 超乎想像的宇宙 1 無限空間 720p The Fabric of the Cosmos 1 What is Space http youtu be dOVp8FypiTo list PL6qRRMFI035qD5 zZ
  • 网络编程之五种I/O模型

    在网络编程中有5中I O模型 今天我们就来聊一聊这5中模型的原理和区别 1 阻塞I O模型 阻塞I O模型通信示意图如下 阻塞I O模型通信示意图 当用户调用了recvfrom这个系统调用后 内核就开始准备数据 对于网络I O来说 很多时候
  • 记录安装mysql5.6到centos6上面的经历

    下载MySql rpm安装包 国外网站下载太慢 国内镜像下载吧 http mirrors sohu com mysql MySQL 5 6 注意下载 el6 版本的包 el7 是linux 7上使用的 不要直接就奔最新版本去了 主要需要下载
  • 自定义注解记录操作日志

    自定义注解 自定义注解首先要知道元注解 也就是注解的注解 是jdk内置的 元注解有四种 Retention 注解保留策略 Retention RetentionPolicy SOURCE 仅存在于源码中 Retention Retentio
  • 本地迅速创建ftp服务器,让其他人获取(下载)你的文件

    我们现在的目的是想要别人共享我们的文件 我们在自己的电脑上创建一个文件服务器ftp 然后别人在浏览器中访问我们的ip地址 或自定义的域名 即可达到别人快速下载我们的资源的目的 1 创建ftp用户 依次点击我的电脑 管理 或者直接cmd下执行
  • 手把手教学,免费不限速内网穿透,zerotier值得拥有

    文章目录 常见的内网穿透原理 frp代理 p2p直连 zero安装说明 1 登录zerotier管理平台创建一个网络 2 windows安装zerotier 并加入到网络 3 linux设备加入到网络 4 安卓设备加入到网络 访问测试 常见
  • QString类型装换为const char*的方法

    QString NewBuildProject ProjectNameLineEdit text toStdString c str 说明 1 NewBuildProject ProjectNameLineEdit text 输出为QStr
  • java实时监控数据变化_银行监控报警系统性能提升50倍,用的全是开源组件

    作者介绍 胖亚鹏 监控技术领域专家 具备十余年监控系统建设经验 精通主流商用及开源监控软件产品的集成应用 专注于监控工具建设 全面支撑传统架构和容器云 分布式架构下的监控管理 探索研究智能化监控 推动分布式架构下以大数据 人工智能技术为基础
  • 【LeetCode-简单】39. 组合总和 (图文详解)

    建议 完全不了解递归的同学 先去学习一下递归 题目 题目地址 https leetcode cn problems combination sum 示例 方法1 回溯算法 思路 来自视频https www bilibili com vide
  • 12.14黄金白银TD行情怎么看;美原油最新交易操作指导

    黄金最新资讯 消息面 周二 12月14日 国际金价上涨 但美元同时走强限制了金价涨势 投资者等待美联储今日晚些时候召开的会议 从中寻找美联储如何加快结束经济刺激措施 除此之外 欧洲央行英国央行也将在本周举行会议 美联储将在当日稍晚开始为期两
  • MQ怎么保证消息不丢失?

    在我们做业务时候很多时候需要用到消息队列 那消息队列中是怎么保证消息的可靠性的 我们今天学习目前主流的消息队列是怎么保证消息可靠性 1 RocketMQ 2 Kafka 3 RabbitMQ RocketMQ 持久化存储 RocketMQ