什么是 RocketMQ?
RocketMQ 是阿里巴巴开源 的分布式消息中间件,后捐赠给 Apache 基金会成为顶级项目。它是一个金融级 的可靠消息系统,设计用于处理海量数据 、高并发场景。
核心架构
1. 四大核心组件
NameServer(名字服务) → 轻量级注册中心
↓
Broker(代理服务器) → 消息存储和转发
↓
Producer(生产者) → 消息发送者
↓
Consumer(消费者) → 消息接收者
2. NameServer
-
相当于通讯录 或服务发现中心
-
无状态设计,集群部署
-
功能:
-
管理所有 Broker 的路由信息
-
生产者/消费者通过它查找 Broker
-
心跳检测 Broker 健康状态
-
3. Broker
-
消息的存储和转发中心(核心组件)
-
主从架构:
-
Master:处理读写请求
-
Slave:数据备份,只读(故障时自动切换)
-
-
每个 Broker 有多个队列
4. 消息模型
主题(Topic) → 消息的分类
↓
消息队列(MessageQueue) → 主题的分区(类似Kafka的Partition)
↓
消费组(ConsumerGroup) → 一组消费者共同消费一个主题
核心概念详解
1. 主题(Topic)
-
消息的逻辑分类
-
一个主题包含多个消息队列(分布式存储的基础)
2. 消息队列(MessageQueue)
-
主题的物理分区
-
是并行消费和水平扩展的基础
-
每个队列是有序的,但队列之间无序
3. 标签(Tag)
-
消息的二级分类(比 Topic 更细粒度)
-
用于过滤消息,提高消费效率
4. 消费位点(Offset)
-
记录消费者在队列中的消费进度
-
RocketMQ 同时支持:
-
Broker 端存储(集群模式)
-
本地存储(广播模式)
-
消息类型
1. 普通消息
-
基本消息类型
-
无特殊功能要求
2. 顺序消息
-
全局顺序:整个主题有序(性能低)
-
分区顺序:同一队列内有序(常用)
-
应用场景:订单状态流转
3. 定时/延时消息
-
指定时间或延迟一段时间后投递
-
支持固定延时等级(如:5s、10s、1m等)
4. 事务消息
-
两阶段提交保证分布式事务一致性
-
流程:
-
发送半消息(对消费者不可见)
-
执行本地事务
-
提交/回滚消息
-
核心特性
1. 高可用设计
-
多主多从架构:避免单点故障
-
同步双写:主从数据实时同步
-
自动故障转移:Master 宕机,Slave 自动接管
2. 海量消息堆积能力
-
支持百万级消息堆积
-
高性能存储设计(CommitLog + ConsumeQueue)
-
磁盘顺序写,性能接近内存
3. 高性能
-
单机支持 10万+ TPS(每秒事务数)
-
低延迟(毫秒级)
4. 消息轨迹
-
完整追踪消息的生命周期
-
便于排查问题和监控
5. 丰富的消息过滤
-
Tag 过滤
-
SQL92 语法过滤(基于消息属性)
消费模式
1. 集群消费(Clustering)
-
默认模式
-
一条消息只被消费组内的一个消费者消费
-
实现负载均衡
2. 广播消费(Broadcasting)
-
一条消息被消费组内的所有消费者消费
-
每个消费者都有全量消息
与 RabbitMQ 的关键差异
| 特性 | RocketMQ | RabbitMQ |
|---|---|---|
| 设计目标 | 海量数据、高吞吐 | 企业集成、复杂路由 |
| 吞吐量 | 10万+ TPS | 万级 TPS |
| 消息堆积 | 百亿级 | 百万级 |
| 顺序消息 | 原生支持 | 有限支持 |
| 延迟消息 | 多个固定等级 | 灵活但复杂 |
| 事务消息 | 原生支持 | 插件支持 |
| 协议 | 自定义协议 | AMQP 协议 |
| 路由功能 | 相对简单 | 非常丰富 |
典型应用场景
1. 电商交易系统
-
订单创建、支付、发货等流程解耦
-
保证数据最终一致性
2. 金融核心系统
-
资金清算、对账处理
-
要求高可靠性和强一致性
3. 大数据采集
-
日志收集、行为数据采集
-
海量数据缓冲和转发
4. 实时计算
-
流式计算的数据源
-
与 Flink、Spark 等集成
5. 物联网(IoT)
-
海量设备消息接入
-
设备状态同步
消息生命周期
生产者 → 消息 → NameServer → Broker → 持久化存储
↓
消费者 ← 拉取消息 ← 消费位点管理 ← 消息过滤
优势总结
-
金融级可靠:经过阿里巴巴双11万亿级流量验证
-
海量堆积:支持百亿级消息存储
-
高性能:低延迟、高吞吐
-
分布式:天然支持水平扩展
-
功能丰富:顺序、事务、定时消息等
-
生态完整:丰富的周边工具和客户端
适用场景建议
-
选择 RocketMQ 当:
-
需要处理海量消息
-
对吞吐量要求极高
-
需要顺序消息 或事务消息
-
系统规模大,需要水平扩展
-
金融级可靠性要求
-
RocketMQ 就像一个高吞吐量的消息高速公路系统,专为大规模、高性能的分布式场景设计,特别适合互联网、金融、电商等需要处理海量消息的业务场景。