从互联网到云时代,Apache RocketMQ 是如何演进的?
作者:隆基
2022 年,RocketMQ 5.0 的正式版发布。相对于 4.0 版本而言,架构走向云原生化,并且覆盖了更多业务场景。
消息队列演进史
操作系统、数据库、中间件是基础软件的三驾马车,而消息队列属于最经典的中间件之一,已经有 30 多年的历史。消息队列的发展主要经历了以下几个阶段:

- 第一阶段(1980-2000 年) 80 年代诞生了第一款消息队列 The Information Bus,第一次提出发布订阅模式来解决软件之间的通信问题;90 年代是国际商业软件巨头的时代,IBM、Oracle、Microsoft 纷纷推出自己的 MQ,其中最具代表性的为 IBM MQ,价格昂贵,面向高端企业,主要是大型金融、电信等企业。该类商业 MQ 一般采用高端硬件,软硬件一体机交付,MQ 本身的软件架构为单机架构。
- 第二阶段(2000~2007 年)
进入 00 年代后,初代开源消息队列崛起,诞生了 JMS、AMQP 两大标准,与之对应的两个实现分别为 ActiveMQ、RabbitMQ,他们引领了初期的开源消息队列技术。开源极大促进了消息队列的流行,降低了使用门槛,技术普惠化,逐渐成为企业级架构的标配。相比于今天而言,这类 MQ 主要面向传统企业级应用和小流量场景,横向扩展能力较弱。 - 第三阶段(2007~2017 年) PC 互联网、移动互联网爆发式发展。由于传统的消息队列无法承受亿级用户的访问流量与海量数据传输,诞生了互联网消息中间件,核心能力是全面采用分布式架构,具备很强的横向扩展能力,开源典型代表有 Kafka、RocketMQ,闭源的有淘宝 Notify。Kafka 的诞生还将消息中间件从消息领域延伸到了流领域,从分布式应用的异步解耦场景延伸到大数据领域的流存储与流计算场景。
- 第四阶段(2014~至今) 云计算、IoT、大数据引领了新的浪潮。
互联网时代的 RocketMQ
阿里的电商系统最初是个庞大的单体巨石应用,在研发效率、稳定性方面都无法满足淘宝和天猫飞速的发展。为了解决问题,2008 年,淘宝与天猫发起了一次最大规模的架构升级,启动了“五彩石”项目,将单体应用拆分为分布式应用,同时抽象淘宝、天猫的共同底座——业务中台,包括交易中心、商品中心、买家中心等。在业务中台之下,同时诞生了阿里中间件(初期三大件包括消息、RPC、分布式数据层),RocketMQ 是其中之一。

虽然在当时业界已经存在不少商业或开源的消息队列,比如 IBMMQ、ActiveMQ、RabbitMQ,但无一例外,它们都诞生于传统企业级应用的场景,无法承受互联网对于高并发、无限扩展的苛刻要求。以 RabbitMQ 为例,RabbitMQ 的队列流量与存储负载都为单机,无法满足业务横向扩展的需求。当时另一款具备无限横向扩展能力的消息队列是 Kafka,但其主要用于日志类场景,未经过大规模核心业务稳定性验证,而且偏向于简单的 log 型消息队列,无法满足电商对于复杂消息功能特性的诉求,比如消息过滤、延迟消息等。
另一方面,传统的消息队列无法解决电商业务对于分布式一致性的要求。通过消息队列实现应用异步解耦后,电商业务还需要保障不同上下游应用对于订单状态要达成最终一致,否则会产生大量脏数据,造成业务错误。
大规模的电商系统,既要高性能又要一致性,传统的分布式事务技术束手无策。比如IBM MQ 虽然可以使用 XA 事务来满足分布式一致性的功能诉求,但是 XA 带来的延迟与成本,对于海量的互联网流量难以承受。
为了解决电商业务对于消息队列的高性能、一致性、无限扩展等需求,自研消息队列成为了当时阿里唯一的出路,最终互联网消息队列 RocketMQ 应运而生。

为了支持超大规模的复杂电商业务,RocketMQ 面向四个方面进行了重点建设,形成了四大优势能力。
① 支撑超大规模复杂业务的能力,具备丰富的消息特性
每一个大型互联网公司都会有主营业务(比如阿里是交易、蚂蚁是支付、饿了么是外卖),以主营业务为中心扩展业务能力,阿里电商是围绕交易事件建设的电商操作系统,每笔交易事件都会触发不同的业务,不同细分业务会关注不同类型的交易事件,比如垂直市场只关注某个类目的交易事件、天猫超市只关注某个卖家的交易事件、购物车只关注下单成功的交易事件等。
RocketMQ 的 SQL 订阅提供灵活的消息过滤能力,能够满足下游消费者按照不同的业务维度进行消息过滤的诉求。
在大型互联网业务中,还会有各种定时事件触发场景,最典型的是交易超时关闭机制,阿里交易或者 12306 订票都有类似的机制。RocketMQ 的定时消息能够很方便的满足这类诉求。
② 一致性
无论是阿里交易还是蚂蚁支付,都天然对数据一致性有着极高要求,RocketMQ 在一致性方面也打造了多个关键特性。最具代表性的是分布式事务消息,RocketMQ 是第一个实现该种特性的消息队列,能够保障交易的上下游对于订单状态达到最终一致。该方案也成为异步消息一致性方案的事实标准,被多个互联网公司所采纳,甚至也有公司将移植到定制版的 Kafka 种。除了分布式一致性之外,RocketMQ 还提供了顺序消息的特性,满足顺序一致性的需求。
③ 稳定性
稳定性是交易与金融场景的基石特性,也是 RocketMQ 的根本。RocketMQ 除了具备核心服务的 HA 之外,还具备了全局高可用能力,在阿里内部支持同城多活、异地多活、中心容灾等高阶 HA 能力。同时,稳定性也不局限于数据与服务的高可用,RocketMQ 从产品层面对稳定性进行了全方位的建设,如消息轨迹、消息回溯、消息死信机制。
④ 高性能
在双十一的极限流量下,RocketMQ 写消息延迟 4 个 9 在 1ms 内,100% 在 100ms 内。RocketMQ 采用 shared-nothing 分布式架构,在吞吐量方面也具备无限扩展的能力,已经连续 10 年支持了双十一万亿级消息洪峰,为百万级的应用实例提供低延迟消息服务。
互联网的故事还在进行,云计算规模化落地的时代悄然而来。
云计算时代的 RocketMQ 5.0
2015 年,RocketMQ 的首个云消息服务在阿里云上线,开启了大规模的云计算实践的序幕。同时 RocketMQ 也是业界第一个提供公有云服务的开源消息队列。
在大规模的云计算业务场景下,RocketMQ 面临着全新的挑战与机遇。

- 多样性: 它不再仅服务于某一家公司的内部业务,不再局限于互联网或金融企业,需要实现全行业、全场景的覆盖。
- 标准化: 对于服务企业内部的自研消息队列而言,无需考虑协议或 API 的标准化。但是对于云消息服务而言,因为服务对象是外部企业客户,据信通院统计,80% 以上的企业客户已经采纳开源技术和标准技术。因此,作为一款云消息服务,需要提供对业界的事实标准协议、接口、SDK 的兼容,才能保证客户平滑上云,同时打消客户技术绑定的担忧。
- 云原生: 云原生理念深入人心,消息队列要更好地帮助客户实现云原生应用架构,为业务降本提效。
- 新趋势: 各种新技术的兴起,包括 IoT、5G、边缘计算、事件驱动,还有事件流技术。面向技术的新趋势与多样化的业务需求,RocketMQ 进行了自我进化,演进到 5.0 版本。
为了充分释放云的技术红利,RocketMQ 5.0 在技术架构上进行了云原生的演进。从客户端到服务端都进行了全方位的改造,更高弹性、可用性、更低成本。

- 客户端采用轻量 SDK 设计理念,将原来富客户端的逻辑下沉到 Broker,满足现代化应用轻量化、Serverless 的趋势。
- Broker 彻底进行弹性架构改造,分离 RocketMQ Proxy 与 Store 层,其中 Proxy 是完全无状态的计算节点,专注多协议、多领域场景覆盖,可以面向不同工作负载独立弹性,如物联网、微服务、大数据不同场景有不同的资源诉求。Store 层则专注消息的高可用存储,包括副本复制、主备切换与云存储集成。同时对 RocketMQ 的 Topic 资源进行三层解耦,面向消息的Topic、面向流的 Topic 逻辑分片、面向底层存储的 Topic 物理分片,每一层都可以独立弹性。
- 在存储层引入了 Leaderless 的高可用架构,Store 节点身份对等,Leaderless 化,0 外部依赖。多副本策略可定制,可用性+可靠性+成本灵活组合,面向多可用区、多 region 组建 Geo 高可用能力。
为了满足云时代多样化的用户需求,RocketMQ 5.0 从原来的互联网业务消息中间件扩展到"消息、事件、流"超融合处理平台,解锁更全面的能力。

在消息领域, 全面拥抱云原生技术,更好的弹性架构与高可用能力。
在事件领域, 支持 CloudEvent 规范,以事件为中心的产品新界面,助力客户建设跨业务、跨组织的数字化商业生态。
在流领域, 流存储增强批量特性,大幅度提高数据吞吐量;新增逻辑队列能力,解耦逻辑资源与物理资源,在流场景也具备无缝伸缩能力;新增流数据库 RSQLDB,提供实时事件流处理、流分析能力。
RocketMQ 基于端云一体化架构实现了完整的物联网消息队列的能力,从原来的连接应用扩展到连接物联网设备。同时 RocketMQ 5.0 也继续保持极简架构的原则,能够以最低的资源消耗、运维成本搭建服务,适合边缘计算。
除了的产品核心能力之外,RocketMQ 5.0 积极建设开源生态。

一方面是应用架构生态的建设,既有经典的开源项目、规范的集成,比如 JMS、AMQP 等,也有云原生技术生态的集成,比如 CloudEvents、Dapr、Envoy。同时 RocketMQ 也会进一步发力数据架构生态,全链路集成大数据的摄入、数据存储、数据处理、数据分析组件,从离线大数据到实时大数据。
RocketMQ 学习社区体验地址
RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码。RocketMQ 学习社区是国内首个基于AIGC提供的知识服务社区,旨在成为 RocketMQ 学习路上的“贴身小二”。
PS:RocketMQ 社区以 RocketMQ 5.0 资料为主要训练内容,持续优化迭代中,回答内容均由人工智能模型生成,其准确性和完整性无法保证,且不代表 RocketMQ 学习社区的态度或观点。
立即体验 RocketMQ 学习社区(建议 PC 端体验完整功能):
https://rocketmq-learning.com/
相关文章:
从互联网到云时代,Apache RocketMQ 是如何演进的?
作者:隆基 2022 年,RocketMQ 5.0 的正式版发布。相对于 4.0 版本而言,架构走向云原生化,并且覆盖了更多业务场景。 消息队列演进史 操作系统、数据库、中间件是基础软件的三驾马车,而消息队列属于最经典的中间件之一…...
XML (可扩展标记语言)
目录 一、概念 二. 使用: 1. 基本语法: 2. 组成部分: (1)文档声明 (2) 指令(了解):结合css (3) 标签:标签名称自定义 (4)…...
socket()、bind()、listen()、htons()
socket() socket() 是一个系统调用函数,用于创建一个套接字(socket),通过该套接字进行网络通信。在这段代码中,socket() 函数被用于创建一个本地套接字。 具体来说,这是 socket() 在代码中的使用方式&…...
提升开发效率,Lombok的链式编程和构建模式
目录 链式编程 定义 代码示例 编辑 Accessors(chaintrue) 开启链式编程 编辑 Accessors(chain true,fluent true) 去除set和get 构建模式 定义 代码示例 编辑 踩坑 Singular 定义 代码示例 踩坑默认值情况 编辑 With 定义 代码示例 链式编程 定义 链…...
DuDuTalk:AI语音工牌如何帮助教培公司高效管理课程顾问团队
近年来,随着人工智能的快速发展,越来越多的公司开始利用AI技术来提高工作效率和管理效果。在教育培训行业中,课程顾问团队的管理对于公司的运营和发展至关重要。 而在实际管理中,受教培人员素质参差不齐,能力差异大&a…...
C语言——静态库和动态库的创建和使用
使用库函数是源码的一种保护 库函数其实不是新鲜的东西,我们一直都在用,比如C库。我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的…...
数学学习——最优化问题引入、凸集、凸函数、凸优化、梯度、Jacobi矩阵、Hessian矩阵
文章目录 最优化问题引入凸集凸函数凸优化梯度Jacobi矩阵Hessian矩阵 最优化问题引入 例如:有一根绳子,长度一定的情况下,需要如何围成一个面积最大的图像?这就是一个最优化的问题。就是我们高中数学中最常见的最值问题。 最优化…...
HCIP期中实验
考试需求 1 、该拓扑为公司网络,其中包括公司总部、公司分部以及公司骨干网,不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名,并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中,运行 OSPF 协议…...
【Git系列】IDEA集成Git
🐳IDEA集成Git 🧊1. idea配置git🧊2. idea添加暂存区和提交🪟创建文件🪟将整个项目添加到暂存区🪟提交到本地仓库🪟查看控制台,显示提交的信息🪟修改文件,再次…...
短视频矩阵源码开发搭建分享--多账号授权管理
目录 文章目录 前言 一、矩阵号系统是什么? 二、使用步骤 1.创建推广项目 2.多账号授权 3.企业号智能客服系统 总结 前言 短视频多账号矩阵系统,通过多账号一键授权管理的方式,为运营人员打造功能强大及全面的“矩阵式“管理平台。…...
数据中台系列2:rabbitMQ 安装使用之 window 篇
RabbitMQ 是一个开源的消息队列系统,是高级消息队列协议(AMQP)的标准实现,用 erlang 语言开发。 因此安装 RabbitMQ 之前要先安装好 erlang。 1、安装 erlang 到 这里 下载本机能运行的最新版 erlang 安装包。如果本机没有装过 …...
Windows驱动开发
开发Windows驱动程序时,debug比较困难,并且程序容易导致系统崩溃,这时可以使用Virtual Box进行程序调试,用WinDbg在主机上进行调试。 需要使用的工具: Virtual Box:用于安装虚拟机系统,用于运…...
汽车分析,随时间变化的燃油效率
简述 今天我们来分析一个汽车数据。 数据集由以下列组成: 名称:每辆汽车的唯一标识符。MPG:燃油效率,以英里/加仑为单位。气缸数:发动机中的气缸数。排量:发动机排量,表示其大小或容量。马力&…...
大数据面试题之Elasticsearch:每日三题(六)
大数据面试题之Elasticsearch:每日三题 1. 为什么要使用Elasticsearch?2.Elasticsearch的master选举流程?3.Elasticsearch集群脑裂问题? 1. 为什么要使用Elasticsearch? 系统中的数据,随着业务的发展,时间…...
【管理设计篇】聊聊分布式配置中心
为什么需要配置中心 对于一个软件系统来说,除了数据、代码,还有就是软件配置,比如操作系统、数据库配置、服务配置 端口 ip 、邮箱配置、中间件软件配置、启动参数配置等。如果说是一个小型项目的话,可以使用Spring Boot yml文件…...
远程控制平台简介
写在前面 之所以想自己动手实现一个远程控制平台,很大一部分原因是因为我那糟糕的记性,虽然经常加班到很晚,拖着疲惫的步伐回到家,才想起忘记打卡了,如果我能在家控制在办公室的手机打一下卡就好了… 有人说,市场上有TeamViewer,向日葵,AnyDesk,ToDesk,等等这些老大…...
韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型
前言 (1)前面已经已经详细介绍了LED驱动如何进行编写的代码。如果韦东山Linux驱动入门实验班(4)LED驱动已经看懂了,驱动入门实验班后面的那些模块实验,其实和单片机操作差不太多了。我就不再浪费时间进行讲…...
【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境
知识点:简单了解K210芯片 2018年9月6日,嘉楠科技推出自主设计研发的全球首款基于RISC-V的量产商用边缘智能计算芯片勘智K210。该芯片依托于完全自主研发的AI神经网络加速器KPU,具备自主IP、视听兼具与可编程能力三大特点,能够充分适配多个业务场景的需求。作为嘉楠科…...
C#——Thread与Task的差异比较及使用环境
C#——Thread与Task的差异比较及使用环境 前言一、差异1. 创建和管理:2. 异步编程:3. 返回值:4. 异常处理:5. 线程复用: 总结 前言 前面两篇文章,分别通过各自的实例讲了关于Task以及Thread的相关的使用特…...
刷题 31-35
三十一、 747. 至少是其他数字两倍的最大数 给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。 示例 1&a…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
