首页 > 其他分享 >RocketMQ系统性学习-RocketMQ原理分析之消息的可靠性以及有序性如何保证

RocketMQ系统性学习-RocketMQ原理分析之消息的可靠性以及有序性如何保证

时间:2024-01-07 13:01:25浏览次数:111  
标签:可靠性 Broker 发送 保证 消息 有序性 RocketMQ

欢迎关注公众号:【11来了】 发送 “资料” 可以下载Redis、JVM系列文章PDF版本!

作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!

消息的可靠性如何保证?

RocketMQ系统性学习-RocketMQ原理分析之消息的可靠性以及有序性如何保证_RocketMQ

要保证消息的可靠性,先来思考一下从哪些方面保证呢?

这要看消息的生命周期,既然保证可靠性,那么就是要保证 A 发送给 B 的消息一定可以成功,那么首先要保证发送成功,其次要保证 B 接收成功,而在 RocketMQ 中,消息是先发送到 Broker 中了,那么还需要保证 MQ 在 Broker 中不会丢失,因此 RocketMQ 是从三方面保障了消息的可靠性:生产者、Broker、消费者

  • 生产者保证消息的可靠性:生产者发送消息分为同步发送、异步发送、单向发送三种方式,那么单向发送是没有消息可靠性的保证的,而在同步和异步发送中,都可以通过添加消息的重试次数添加 ResponseCode添加当前 Broker 不可用时发送到其他 Broker 三种策略来保证数据的 发送可靠性
  • Broker 保证消息的可靠性:即保证消息发送到 Broker 中,不会因为 Broker 突然宕机而导致数据丢失,那么其实就是保证消息存储在 Broker 的可靠性,肯定是需要将数据存储在磁盘上才可靠,那么数据存储到磁盘上的方式还分为了 同步刷盘异步刷盘,同步刷盘不会丢失消息,异步刷盘可能会丢失!
    那么 Broker 可能磁盘还会损坏呢,因此还需要通过备份节点来保证消息的可靠性,因此呢在 Broker 端有两种可靠性保证:刷盘策略(同步刷盘、异步刷盘)备份节点
  • 消费者保证消息的可靠性:保证数据的消费,通过先消费数据,再提交成功状态来保证,消费者还需要具有一定的 幂等性 处理,因为消费者可能会消费多条消息
    如果消费者最终重试消费消息失败,那么还可以通过去死信队列中消费数据来保底

消息的有序性如何保证?

还是从三个方面来保证:发送端、存储端、消费端

  • 发送端保证消息的有序性:要保证有序性,那么必须要将需要保证有序性的消费给放到同一个队列中才可以,因此在 Topic 中设置一个队列就可以保证消息的有序性;如果在 Topic 中设置了多个队列,那么只需要将需要保证有序的消息放在同一个队列中即可,这种方式需要使用下图中的 api 来实现一个队列选择器,让有序消息选择同一个队列发送即可
  • 存储端保证消息的有序性:通过 CommitLog + MessageQueue + IndexFile 来保证消息在 MessageQueue 中有序存储即可
  • 消费端保证消息的有序性:可以为消费者注册有序消费的监听器即可 MessageListenerOrderly

如果想要保证在多个队列中消息的有序性,可以使用 全局的时间戳 ,在消费端 记录已经消费消息的最小时间戳 即可保证消费的有序性!




标签:可靠性,Broker,发送,保证,消息,有序性,RocketMQ
From: https://blog.51cto.com/u_16186397/9133970

相关文章

  • RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析
    欢迎关注公众号:【11来了】发送“资料”可以下载Redis、JVM系列文章PDF版本!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!RocketMQ原理分析启动RocketMQ源码分析RocketMQ之前,先确保可以成功启动起来NameServer启动在Idea中配置ROCK......
  • RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及事务消息收发、最大重试消费
    欢迎关注公众号:【11来了】发送“资料”可以下载Redis、JVM系列文章PDF版本!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!事务消息收发流程如下:发送给MQ一条任务操作MQ的Broker成功收到后,那么发送方就开始执行原子db业务如果执行原子......
  • RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消息追踪、延时消息实战
    欢迎关注公众号:【11来了】发送“资料”可领取深入理解Redis系列文章结合电商场景讲解Redis使用场景、中间件系列笔记和编程高频电子书!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!消息追踪设置消息追踪需要修改broker启动的配置文件......
  • 【中小型企业网络实战案例 五】配置可靠性和负载分担
      原创:厦门微思网络  【微思2002年成立,专业IT认证培训21年!】相关文章【中小型企业网络实战案例六】配置链路聚合【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址......
  • 【中小型企业网络实战案例 五】配置可靠性和负载分担
    原创:厦门微思网络  【微思2002年成立,专业IT认证培训21年!】相关文章【中小型企业网络实战案例四】配置OSPF动态路由协议网络工程师-入门必修课:华为HCIADatacom认证介绍网络工程师-进阶提升课:华为HCIPDatacom认证介绍职场进阶,踏上高峰——HCIE-Datacom认证配置VRRP联动接口检......
  • 高可靠性的F2915NBGK8、F2914NBGK8射频开关,MAAL-011078-001SMB具有超低噪声系数的射频
    1、F2915NBGK8 高可靠性SP5T射频开关 8GHZ24VFQFPNF2915是一款高可靠性、低插入损耗、50ΩSP5T吸收式射频开关,专为各种无线和其他射频应用而设计。该器件覆盖50MHz至8000MHz的宽频率范围。除了提供低插入损耗外,F2915还提供出色的线性度和隔离性能,同时为未使用的RF端口提供50......
  • RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消费收发实战
    欢迎关注公众号:【11来了】发送“资料”可以下载Redis、JVM系列文章PDF版本!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!SpringCloudAlibaba集成RocketMQ最佳实践SpringBoot相对于SSM来说已经很大程度上简化了开发,但是使用SpringBo......
  • MAC 下载安装、启动和关闭 RocketMQ实例
    文章目录1.下载并解压2.实例2.1使用Maven打包、构建2.2修改Nameserver和Broker启动的配置2.2启动nameserver和broker3.关闭rocketmq的命令参考文献1.下载并解压首先,你需要安装好Java环境、Maven。网址:http://rocketmq.apache.org/dowloading/releases/,下载ro......
  • RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装
    欢迎关注公众号【11来了】,发送笔记可领取Redis、JVM等系列完整pdf!MQ之间的对比三种常用的MQ对比,ActiveMQ、Kafka、RocketMQ性能方面:三种MQ吞吐量级别为:万,百万,十万消息发送时延:毫秒,毫秒,微秒可用性:主从,分布式,分布式扩展性方面:水平伸缩能力:均支持技术栈:Java,Java/Scala,Java功能......
  • 阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战
    作者:贤维马建波古九五花刘佳旭引言2023年7月,阿里云容器服务ACK成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品,并荣获“先进级”认证。随着ACK在生产环境中的采用率越来越高,稳定性保障已成为基本诉求。本文基于ACK稳定性保障实践经验,帮助用......