RocketMQ简介

什么是 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. 发送半消息(对消费者不可见)

    2. 执行本地事务

    3. 提交/回滚消息

核心特性

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 → 持久化存储
    ↓
消费者 ← 拉取消息 ← 消费位点管理 ← 消息过滤

优势总结

  1. 金融级可靠:经过阿里巴巴双11万亿级流量验证

  2. 海量堆积:支持百亿级消息存储

  3. 高性能:低延迟、高吞吐

  4. 分布式:天然支持水平扩展

  5. 功能丰富:顺序、事务、定时消息等

  6. 生态完整:丰富的周边工具和客户端

适用场景建议

  • 选择 RocketMQ 当:

    • 需要处理海量消息

    • 吞吐量要求极高

    • 需要顺序消息事务消息

    • 系统规模大,需要水平扩展

    • 金融级可靠性要求

RocketMQ 就像一个高吞吐量的消息高速公路系统,专为大规模、高性能的分布式场景设计,特别适合互联网、金融、电商等需要处理海量消息的业务场景。

相关推荐
独自破碎E17 小时前
消息队列如何处理重复消息?
java·开发语言·rocketmq
Kiyra2 天前
八股篇(1):LocalThread、CAS和AQS
java·开发语言·spring boot·后端·中间件·性能优化·rocketmq
武子康2 天前
Java-213 RocketMQ(MetaQ)演进与核心架构:NameServer/Broker/Producer/Consumer 工作机制
大数据·分布式·架构·消息队列·系统架构·rocketmq·java-rocketmq
Kiyra2 天前
Spring Boot Starter 自定义开发:封装中间件配置
spring boot·redis·后端·缓存·中间件·性能优化·rocketmq
武子康2 天前
Java-216 RocketMQ 4.5.1 在 JDK9+ 从0到1全流程启动踩坑全解:脚本兼容修复(GC 参数/CLASSPATH/ext.dirs)
java·大数据·分布式·消息队列·系统架构·rocketmq·java-rocketmq
武子康2 天前
Java-215 RocketMQ 消费模式:Push vs Pull 的本质、长轮询机制与 Offset/积压调优要
java·大数据·分布式·消息队列·rocketmq·java-rocketmq·mq
@淡 定2 天前
主流消息队列对比:Kafka vs RabbitMQ vs RocketMQ
kafka·rabbitmq·rocketmq
广东数字化转型2 天前
四.RocketMQ极简入门-RocketMQ顺序消息发送
rocketmq
Mr.朱鹏3 天前
超时订单处理方案实战指南【完整版】
java·spring boot·redis·spring·rabbitmq·rocketmq·订单
广东数字化转型4 天前
RocketMQ从入门到深入
spring boot·rocketmq·java-rocketmq