RocketMQ 教程
Apache RocketMQ 是一款开源的分布式消息中间件,由阿里巴巴开发并捐赠给 Apache 基金会。经过多年双十一大规模场景验证,RocketMQ 已成为业界主流的消息中间件之一。
什么是 RocketMQ?
RocketMQ 是一款分布式消息中间件,用于在分布式系统中进行异步通信。它采用发布-订阅模型,支持普通消息、顺序消息、事务消息、延时消息等多种消息类型。
核心定位
RocketMQ 定位为"消息、事件、流"实时数据处理平台,具备以下核心能力:
- 消息:传统的消息队列功能,支持异步解耦、流量削峰
- 事件:事件驱动架构,支持事件溯源、EDA 架构
- 流:流式数据处理,支持消息流转、实时计算
为什么选择 RocketMQ?
架构简单
RocketMQ 的架构设计简洁清晰,主要由 NameServer、Broker、Producer、Consumer 四个核心组件构成:
对比其他消息中间件:
| 特性 | RocketMQ | Kafka | RabbitMQ |
|---|---|---|---|
| 架构复杂度 | 低 | 高 | 中 |
| 运维成本 | 低 | 高 | 中 |
| 消息可靠性 | 高 | 高 | 高 |
| 吞吐量 | 高 | 极高 | 中 |
| 延迟 | 低 | 中 | 低 |
| 事务消息 | 支持 | 不支持 | 不支持 |
| 延时消息 | 支持 | 不支持 | 支持 |
| 顺序消息 | 支持 | 支持 | 不支持 |
业务功能丰富
RocketMQ 提供了丰富的消息类型,满足各种业务场景:
高可靠性
经过多年双十一流量洪峰验证,RocketMQ 具备极高的可靠性:
- 消息不丢失:同步刷盘、异步复制机制
- 高可用:主从架构,自动故障转移
- 消息轨迹:完整的消息链路追踪
- 死信队列:异常消息处理机制
云原生支持
RocketMQ 5.0 全面拥抱云原生:
- 存算分离:Broker 和 Proxy 分离部署
- 多语言 SDK:Java、C++、Go、Python 等
- 容器化部署:支持 Kubernetes Operator
- 云原生 API:gRPC 协议,更好的跨语言支持
适用场景
1. 异步解耦
将非核心业务异步化处理,降低系统耦合度:
优势:
- 降低系统响应时间
- 提高系统吞吐量
- 故障隔离,提高系统稳定性
2. 流量削峰填谷
应对突发流量,保护下游系统:
优势:
- 防止系统过载
- 平滑流量波动
- 提升用户体验
3. 分布式事务
保证跨服务操作的最终一致性:
优势:
- 保证最终一致性
- 简化分布式事务实现
- 降低系统复杂度
4. 日志流处理
实时收集和处理日志数据:
与其他消息队列对比
RocketMQ vs Kafka
| 对比项 | RocketMQ | Kafka |
|---|---|---|
| 设计目标 | 业务消息 | 日志流处理 |
| 消息模型 | 发布订阅 | 发布订阅 + 消费者组 |
| 消息过滤 | Tag、SQL92 | 不支持 |
| 事务消息 | 支持 | 不支持 |
| 延时消息 | 支持 | 不支持 |
| 消息回溯 | 支持 | 支持 |
| 死信队列 | 支持 | 不支持 |
| 运维复杂度 | 低 | 高 |
选择建议:
- 业务消息场景优先选择 RocketMQ
- 大数据日志处理场景优先选择 Kafka
RocketMQ vs RabbitMQ
| 对比项 | RocketMQ | RabbitMQ |
|---|---|---|
| 吞吐量 | 高 | 中 |
| 延迟 | 低 | 低 |
| 消息模型 | 发布订阅 | 多种模型 |
| 分布式 | 原生支持 | 需要集群 |
| 事务消息 | 支持 | 不支持 |
| 管理界面 | 需要 Dashboard | 内置 Web 管理 |
| 协议支持 | 自定义协议 | AMQP、MQTT 等 |
选择建议:
- 高吞吐量场景优先选择 RocketMQ
- 需要多种消息协议场景选择 RabbitMQ
技术架构概览
核心组件
| 组件 | 说明 |
|---|---|
| NameServer | 路由注册中心,类似注册中心 |
| Broker | 消息存储和转发服务器 |
| Producer | 消息生产者 |
| Consumer | 消息消费者 |
消息流转过程
教程目录
入门基础
消息收发
高级特性
集群与运维
安全与追踪
参考资料
- 速查表 - 常用命令和配置速查
学习建议
- 理解核心概念:先掌握 Topic、Queue、Producer、Consumer 等核心概念
- 动手实践:本地搭建环境,完成消息收发的 Demo
- 深入学习:了解事务消息、顺序消息等高级特性
- 生产实践:学习集群部署、监控运维等生产环境知识
版本说明
本教程基于 RocketMQ 5.x 版本编写,同时兼顾 4.x 版本的兼容性说明。RocketMQ 5.x 带来了以下重大改进:
- 新的 5.0 API,更现代化的客户端接口
- 存算分离架构,Broker 和 Proxy 可独立部署
- gRPC 协议支持,更好的多语言支持
- 消息类型强制校验,更好的运维管理