当前位置: 首页 > news >正文

RocketMQ 知识速览

文章目录

    • 一、消息队列对比
    • 二、RocketMQ 基础
      • 1. 消息模型
      • 2. 技术架构
      • 3. 消息类型
      • 4. 消费者类型
      • 5. 消费者分组和生产者分组
    • 三、RocketMQ 高级
      • 1. 如何解决顺序消费和重复消费
      • 2. 如何实现分布式事务
      • 3. 如何解决消息堆积问题
      • 4. 如何保证高性能读写
      • 5. 刷盘机制 (topic 模型)
      • 6. 存储机制(topic 模型)

一、消息队列对比

对比方向概要
吞吐量万级的 ActiveMQ 和 RabbitMQ 的吞吐量(ActiveMQ 的性能最差)要比十万级甚至是百万级的 RocketMQ 和 Kafka 低一个数量级。
时效性RabbitMQ 基于 Erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级,其他几个都是 ms 级。
可用性都可以实现高可用。ActiveMQ 和 RabbitMQ 都是基于主从架构实现高可用性。
可靠性ActiveMQ 和 RabbitMQ 丢失的可能性非常低, Kafka、RocketMQ 和 Pulsar 理论上可以做到 0 丢失。
可扩展性Kafka、RabbitMQ 具有良好的可扩展性,可以通过添加更多的节点来提高容量和性能。RocketMQ 支持水平和垂直扩展,但是节点的数量有一定限制。
顺序消息Kafka 同一分区内保证顺序性、RocketMQ 原生支持顺序消息队列,RabbitMQ 需要使用单个队列实现
其他持久化、延迟队列、死信队列、消息回溯、消息确认、消息TTL、消费模式

Ref: https://cloud.tencent.com/developer/article/1944357

二、RocketMQ 基础

1. 消息模型

  • 队列模型
    在这里插入图片描述

局限:无法广播

  • 主题模型 / 发布订阅模型
    在这里插入图片描述
  • Producer GroupTopicConsumer Group

2. 技术架构

在这里插入图片描述

3. 消息类型

  • 普通消息
    • 生命周期:初始化>待消费>消费中>消费提交>消息删除)
  • 定时消息(延时 & 定时)
    • 生命周期:初始化>定时中>待消费>消费中>消费提交>消息删除
  • 顺序消息
  • 事务消息

4. 消费者类型

  • PushConsumer
    • 哪些错误使用方式会导致无法保证消息的可靠性(核心: 必须消费成功再返回)
  • SimpleConsumer
    • 是一种接口原子型的消费者类型,消息的获取、消费状态提交以及消费重试都是通过消费者业务逻辑主动发起调用完成
  • PullConsumer

5. 消费者分组和生产者分组

  • 生产者分组是匿名的;
  • 消费者分组是多个消费行为一致的消费者的负载均衡分组,可以实现水平扩展以及高可用容灾。

三、RocketMQ 高级

1. 如何解决顺序消费和重复消费

顺序消费

  • 只有队列模型支持
  • 普通顺序(异常情况下可能乱序,比如 broker 重启)和严格顺序(binlog 同步场景)
  • 多队列时需要使用队列选择算法(轮询算法 - 绑定topic & 默认,最小投递延迟 - 会导致消息分布不均匀,继承MessageQueueSelector实现hash)保证同一类数据始终路由到同一队列

重复消费

  • 实现幂等

2. 如何实现分布式事务

比较常见的分布式事务实现有 2PC、TCC 和事务消息(half 半消息机制);
RocketMQ 使用 事务消息 + 事务反查机制
在这里插入图片描述

以上步骤 都是在生产者监听器实现类中实现的,

  • 对应接口:RocketMQLocalTransactionListener,
  • 接口方法:
    • executeLocalTransaction - 事务执行方法
    • checkLocalTransaction - 事务回查方法

事务消息是生产者通过 rocketMQTemplate.sendMessageInTransaction 方法发送的

3. 如何解决消息堆积问题

消息堆积的根源:生产者生产太快 或 消费者消费太慢

  • 生产者生产太快:限流降级
  • 消费者消费太慢:检查是否有大量消费失败,排查资源死锁
  • 通用方案:增加消费者实例数量和每个主题的队列数量

4. 如何保证高性能读写

  • 零拷贝技术 vs. 传统 IO(read/write)
    mmap(4次上下文切换+3次IO,优点是用户可以感知和修改数据内容,RocketMQ 主要使用的方法) 和 sendfile(2次上下文切换+3次IO)

5. 刷盘机制 (topic 模型)

同步刷盘 & 异步刷盘

  • 保证可靠性

同步复制 & 异步复制

  • 保证可用性,不影响可靠性,因为主从复制的主节点挂掉后生产者不会再向该队列发送,也不会自动切换主从

6. 存储机制(topic 模型)

RocketMQ 消息存储架构中的三大角色——CommitLog、ConsumeQueue 和 IndexFile

  • CommitLog:消息主体以及元数据的存储主体,用于顺序写入日志文件
  • ConsumeQueue:消息消费队列,引入的目的主要是提高消息消费的性能,ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定 Topic 下的队列消息在 CommitLog 中的起始物理偏移量 offset,消息大小 size 和消息 Tag 的 HashCode 值。Consumequeue 文件可以看成是基于 topic 的 Commitlog 索引文件
  • IndexFile:IndexFile(索引文件)提供了一种可以通过 key 或时间区间来查询消息的方法

相关文章:

RocketMQ 知识速览

文章目录 一、消息队列对比二、RocketMQ 基础1. 消息模型2. 技术架构3. 消息类型4. 消费者类型5. 消费者分组和生产者分组 三、RocketMQ 高级1. 如何解决顺序消费和重复消费2. 如何实现分布式事务3. 如何解决消息堆积问题4. 如何保证高性能读写5. 刷盘机制 (topic 模…...

优化 Azure Synapse Dedicated SQL Pool中的 SQL 执行性能的经验方法

在 Azure Synapse Dedicated SQL Pool中优化 SQL 执行涉及了解底层体系结构(例如分布和分区)、查询优化(例如避免不必要的子查询和联接),以及利用具体化视图和 PolyBase 等工具进行高效数据加载。 1.有效使用分布和分…...

详解英语单词“pro bono”:公益服务的表达(中英双语)

中文版 详解英语单词“pro bono”:公益服务的表达 一、词义解释 “Pro bono” 是一个源自拉丁语的短语,完整表达为 “pro bono publico”,意思是“为了公众利益”(for the public good)。在现代英语中,它…...

16. C语言 字符串详解

本章目录: 前言C 字符串的基础概念字符串的定义字符串的内存表示 常见的字符串操作函数示例代码 深入探讨字符串长度计算strlen 与 sizeof 的区别 字符串操作的注意事项**1. 字符数组的大小**2. 字符数组和字符指针的区别3. 使用安全函数 字符串的遍历与格式化输出**遍历字符串…...

使用Buildroot开始嵌入式Linux系统之旅-3

文章目录 at91bootstrap操作教程修改at91bootstrap具体配置重新编译at91bootstrap U-Boot操作教程修改U-Boot具体配置重新编译U-Boot Linux Kernel操作教程修改Linux Kernel具体配置重新编译Linux Kernel buildroot操作进阶生成图形化软件模块依赖关系查看具体软件模块依赖关系…...

[免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue新能源汽车充电桩管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue新能源汽车充电桩管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息化时代的到来&#xff0…...

【已解决】【记录】2AI大模型web UI使用tips 本地

docker desktop使用 互动 如果需要发送网页链接,就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复,在右上角打开【对话高级设置】 输入提示词(提示词使用英文会更好) Must reply to the us…...

44.ComboBox的数据绑定 C#例子 WPF例子

固定最简步骤,包括 XAML: 题头里引入命名空间 标题下面引入类 combobox绑定资源属性和选择属性,block则绑定和combobox一样的选择属性 C#: 通知的类,及对应固定的任务 引入字段 引入属性 其中资源是只读的 选…...

物联网之传感器技术

引言 在数字化浪潮席卷全球的今天,物联网(IoT)已成为推动各行各业变革的重要力量。而物联网传感器,作为物联网感知层的核心技术,更是扮演着不可或缺的角色。它们如同人类的五官,能够感知物理世界中的各种信…...

QTreeWidget QTreeWidgetItem

QTreeWidgetItem 是 Qt 框架中用于在 QTreeWidget 中表示树形结构中每个节点的类。它是 QTreeWidget 的一部分,允许您创建和管理层次结构的数据展示。 QTreeWidgetItem 用于表示树形结构中的单个节点。 添加子节点: 可以通过 addChild() 方法向节点添加…...

torch.einsum计算张量的外积

torch.einsum 是一种强大的张量操作工具,可以通过爱因斯坦求和约定(Einstein summation convention)来简洁地表示复杂的张量运算。通过它,我们可以高效地计算矩阵乘法、转置、点积、外积等操作。 以下是关于如何使用 torch.einsum 计算两个四维张量在第三维度上的外积的解…...

PostgreSQL 超级管理员详解

1. 什么是 PostgreSQL 超级管理员 PostgreSQL 超级管理员(superuser)是拥有数据库系统最高权限的用户。他们可以执行任何数据库操作,包括但不限于创建和删除数据库、用户、表空间、模式等。超级管理员权限是 PostgreSQL 中权限的最高级别。 …...

RabbitMQ 工作模式使用案例之(发布订阅模式、路由模式、通配符模式)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...

【2024年华为OD机试】(C卷,100分)- 机场航班调度程序 (Java JS PythonC/C++)

一、问题描述 题目描述 XX市机场停放了多架飞机,每架飞机都有自己的航班号,如CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息…...

Vue.js组件开发-使用地图绘制轨迹

在Vue.js中开发一个组件来展示地图并绘制轨迹,可以使用诸如Leaflet.js、Mapbox GL JS或百度地图等地图库。这些库提供了丰富的API来创建和定制地图,以及绘制路径、标记和其他地图元素。 示例: 1. 安装Leaflet.js 首先,需要安装…...

vue 与 vue-json-viewer 实现 JSON 数据可视化

前言 接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据,使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件&#x…...

ubuntu Android : adb logcat 过滤多个log

指定字符串的log,可以用下面的形式,注意加-E和单引号: adb shell " logcat | grep -E strings1|strings2 " 参考:Android : adb logcat 过滤多个log 用adb shell “ logcat | grep -E ‘strings1| strings2 ‘ “ 形…...

kubeneters-循序渐进Cilium网络(三)

文章目录 概要命名空间之间的路由同一节点上的 Pod 到 Pod 路由跨节点的 Pod 间路由总结 概要 在前一篇讨论网络接口的内容中,详细分析了如何识别所有参与 Pod 间路由的接口。同时,以简明的非技术语言阐述了 Cilium 在 Kubernetes 集群中的路由机制。接…...

编译与汇编

本文来自《程序员的自我修养》 编译过程是把预处理完的文件进行一系列词法分析,语法分析,语义分析以及优化后生成相应的汇编文件代码。 现在版本的GCC把预编译和编译两个步骤合并为一个步骤。 gcc -S HelloWorld.c HelloWorld.sint main() {//test/* …...

对MySQL滴MVCC理解(超详细)

学习目标 什么是MVCC?MVCC的核心概念MVCC 的工作原理MVCC 的优势MVCC 的劣势 什么是MySQL中InnoDB下滴快照读和当前读?一、快照读(Snapshot Read)二、当前读(Current Read)三、快照读和当前读的区别四、当前…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...