如何保证消息的可用性/可靠性/不丢失呢 ?

消息可能在哪些阶段丢失呢?可能会在这三个阶段发生丢失:生产阶段、存储阶段、消费阶段

生产阶段

在生产阶段,主要通过请求确认机制,来保证消息的可靠传递

1、同步发送的时候,要注意处理响应结果和异常。如果返回响应OK,表示消息成功发送到了Broker,如果响应失败,或者发生其它异常,都应该重试

2、异步发送的时候,应该在回调方法里检查,如果发送失败或者异常,都应该进行重试,并可以设置重试次数

3、如果发生超时的情况,也可以通过查询日志的API,来检查是否在Broker存储成功

存储阶段

存储阶段,可以通过配置可靠性优先的 Broker 参数来避免因为宕机丢消息,简单说就是可靠性优先的场景都应该使用同步

1、消息只要持久化到 CommitLog(日志文件)中,即使Broker宕机,未消费的消息也能重新恢复再消费。

2、Broker的刷盘机制:同步刷盘和异步刷盘,不管哪种刷盘都可以保证消息一定存储在pagecache中(内存中),但是同步刷盘更可靠,它是Producer发送消息后等数据持久化到磁盘之后再返回响应给Producer

同步刷盘

只有在消息真正持久化至磁盘后RocketMQ的Broker端才会真正返回给Producer端一个成功的ACK响应。同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响,一般适用于金融业务应用该模式较多

异步刷盘(默认)

能够充分利用OS的PageCache的优势,只要消息写入PageCache即可将成功的ACK返回给Producer端。消息刷盘采用后台异步线程提交的方式进行,降低了读写延迟,提高了MQ的性能和吞吐量

3、Broker通过主从模式来保证高可用,Broker支持 Master 和 Slave同步复制、Master 和 Slave异步复制模式,生产者的消息都是发送给Master,但是消费既可以从Master消费,也可以从Slave消费。

同步复制模式可以保证即使Master宕机,消息肯定在Slave中有备份,保证了消息不会丢失。

Broker支持Master 和 Slave 复制,如果一个 Broker 组有 Master 和 Slave,消息需要从 Master 复制到 Slave 上,有同步和异步两种复制方式:

a、同步复制方式:Master 和 Slave 均写成功后才反馈给客户端写成功状态。在同步复制方式下,如果 Master 出故障, Slave 上有全部的备份数据,容易恢复,但是同步复制会增大数据写入延迟,降低系统吞吐量

b、异步复制方式:只要 Master 写成功,即可反馈给客户端写成功状态,系统拥有较低的延迟和较高的吞吐量,但是如果 Master 出了故障,有些数据因为没有被写入 Slave,有可能会丢失

消费阶段

a、手动提交消息应答

使用手动提交可以确保消息被正确处理后再提交应答

b、幂等性消费

在消费端实现幂等性处理,确保重复消费不会导致业务问题

总结

RocketMQ通过以下方式保证消息不丢失:

1、生产端:同步发送、异步发送 + 重试、事务消息

2、Broker端:同步刷盘、搭建Broker集群实现主从复制

3、消费端:手动提交应答、消息重试、幂等性消费

Rocketmq 如何保证消息的可用性/可靠性/不丢失呢 ?的更多相关文章

  1. RocketMQ 如何保证消息不丢失,重复消费

    RocketMQ 如何保证消息不丢失 Producer 提供SYNC的发送消息方式,等待broker处理结果. 发送消息如果失败或者超时,则重新发送. // 同步发送消息,如果5秒内没有发送成功,则重 ...

  2. 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达

    关于tcp三次握手.四次挥手可以看这里:TCP与UDP的差别以及TCP三次握手.四次挥手 1.TCP为甚要3次握手? 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效 ...

  3. RabbitMQ使用教程(四)如何通过持久化保证消息99.99%不丢失?

    1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...

  4. rabbitmq如何保证消息可靠性不丢失

    目录 生产者丢失消息 代码模拟 事务 confirm模式确实 数据退回监听 MQ事务相关软文推荐 MQ丢失信息 消费者丢失信息 之前我们简单介绍了rabbitmq的功能.他的作用就是方便我们的消息解耦 ...

  5. Kafka如何保证消息不丢失不重复

    首先需要思考下边几个问题: 消息丢失是什么造成的,从生产端和消费端两个角度来考虑 消息重复是什么造成的,从生产端和消费端两个角度来考虑 如何保证消息有序 如果保证消息不重不漏,损失的是什么 大概总结下 ...

  6. RabbitMQ 如何保证消息不丢失?

    RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性. 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知 ...

  7. Pulsar の 保证消息的顺序性、幂等性和可靠性

    原文链接:Pulsar の 保证消息的顺序性.幂等性和可靠性 一.背景 前面两篇文章,已经介绍了关于Pulsar消费者的详细使用和自研的Pulsar组件. 接下来,将简单分析如何保证消息的顺序性.幂等 ...

  8. RabbitMq(6) 如何保证消息不丢包

    RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性. 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知 ...

  9. RabbitMQ使用教程(三)如何保证消息99.99%被发送成功?

    1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 在以上两篇博客发布后 ...

  10. RabbitMQ消息丢失问题和保证消息可靠性-消费端不丢消息和HA(二)

    继续上篇文章解决RabbitMQ消息丢失问题和保证消息可靠性(一) 未完成部分,我们聊聊MQ Server端的高可用和消费端如何保证消息不丢的问题? 回归上篇的内容,我们知道消息从生产端到服务端,为了 ...

随机推荐

  1. 从Linux零拷贝深入了解I/O

    转载&学习文章:从Linux零拷贝深入了解I/O 本文将从文件传输场景以及零拷贝技术深究 Linux I/O 的发展过程.优化手段以及实际应用. 前言 存储器是计算机的核心部件之一,在完全理想 ...

  2. Synchronized的各场景使用方法(多窗口售票例子接上篇)

     同步锁机制:在<Thinking in Java>中,是这么说的:对于并发工作,你需要某种方式来防止两个任务访问相同的资源(其实就是共享资源竞争). 防止这种冲突的方法就是当资源被一个 ...

  3. Pipe pg walkthrough Intermediate

    NAMP ┌──(root?kali)-[~] └─# nmap -p- -A 192.168.128.45 Starting Nmap 7.95 ( https://nmap.org ) at 20 ...

  4. Nukem pg walkthrough Intermediate

    nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.105 Starting Nmap 7.94SVN ( https://nmap.org ...

  5. 链路状态路由协议OSPF-02

    路由信息传递与路由计算分离. 基于SPF算法. 以"累计链路开销"作为选路参考值. 所谓Link State(链路状态)指的就是路由器的接口状态.在OSPF中路由器的某一接口的链路 ...

  6. 央国企“严选”!天翼云夺得IaaS+PaaS市场桂冠!

    10月17日,赛迪顾问发布的<2024中国央国企云市场研究报告>显示,2023年,在中国央国企云"IaaS+PaaS"市场中,中国电信天翼云凭借行业云和全栈服务能力.渠 ...

  7. CF1326G 题解

    题意: 蛛网树是一颗平面树,满足点是该树的凸包的顶点上等价于其是叶子. 给定一个平面树,求有多少种对点集的划分,使得每个划分出来的集合都是蛛网树. Solution 考虑树形 dp.设 \(f_u\) ...

  8. Amis配置

    一.穿梭器 { "type": "transfer-picker", "name": "parentMenuId", & ...

  9. Convert byte array to short array in C#

    Create the short array at half the size of the byte array, and copy the byte data in: short[] sdata ...

  10. 从“技术宅”到"机器人教父",那个用机器人改变世界的年轻人

    写在前面 随着民营企业座谈会的召开,有一位年轻的企业家王兴兴映入了我们的视野.没错就是那个让机器人从实验室走向舞台中央的年轻人. 大家对今年春晚的机器人扭秧歌应该都还印象深刻吧,它就出自于王兴兴创办的 ...