rocketmq

81 阅读4分钟

rocketmq是什么

  • rocketmq是阿里出品,后被apache接手开源,apache rocketmq 因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。
  • 简单的pub/sub消息模型

基础模型

image.png

扩展模型

image.png

  • 上图就是一个扩展后的消息模型,包括两个生产者两个消息Topic,以及两组消费者 Comsumer
  • 存储消息Topic的 代理服务器Broker ),是实际部署过程对应的代理服务器
  • 为了消息写入能力的水平扩展,RocketMQ 对 Topic进行了分区,这种操作被称为队列(MessageQueue)
  • 为了消费能力的水平扩展,ConsumerGroup的概念应运而生
  • 相同的ConsumerGroup下的消费者主要有两种负载均衡模式,即广播模式,和集群模式(图中是最常用的集群模式)
  • 在集群模式下,同一个 ConsumerGroup 中的 Consumer 实例是负载均衡消费,如图中 ConsumerGroupA 订阅 TopicA,TopicA 对应 3个队列,则 GroupA 中的 Consumer1 消费的是 MessageQueue 0和 MessageQueue 1的消息,Consumer2是消费的是MessageQueue2的消息。
  • 在广播模式下,同一个 ConsumerGroup 中的每个 Consumer 实例都处理全部的队列。需要注意的是,广播模式下因为每个 Consumer 实例都需要处理全部的消息,因此这种模式仅推荐在通知推送、配置同步类小流量场景使用。

rocketmq的架构

Producer、Consumer又是如何找到Topic和Broker的地址呢?消息的具体发送和接收又是怎么进行的呢?

image.png

rocketmq的部署

rocketmq的基本概念

核心概念

  • ‌Producer‌:消息生产者,通过负载均衡策略将消息发送至 Broker 集群
  • ‌Consumer‌:消息消费者,支持 Push/Pull 模式消费消息,支持集群或广播模式
  • ‌Topic‌:消息的逻辑分类,Producer 按 Topic 发送消息,Consumer 按 Topic 订阅消息
  • ‌Queue‌:Topic 的分区单元,每个 Topic 可划分为多个 Queue 以实现并行处理
  • ‌NameServer‌:轻量级服务发现组件,管理 Broker 路由信息,无状态设计,节点间无通信
  • ‌‌Broker‌:消息存储与转发节点,支持分布式部署,通过集群保证高可用性

数据流转链路

  • Producer 向 NameServer 查询 Broker 地址,发送消息至指定 Topic 的 Queue
  • Broker 将消息持久化至 CommitLog(物理存储文件)并生成 ConsumeQueue(逻辑索引)
  • Consumer 通过 NameServer 获取 Broker 地址,从 ConsumeQueue 拉取消息偏移量,最终读取 CommitLog 中的实际数据

核心特性

‌高性能与高可靠‌

  • 单机支持万级队列,堆积亿级消息时仍保持低延迟
  • 基于分布式集群和持久化机制(CommitLog + ConsumeQueue)保证消息不丢失

‌消息类型支持‌

  • ‌顺序消息‌:同一队列内严格按生产者发送顺序消费,适用于订单流程等场景
  • ‌事务消息‌:通过二阶段提交实现消息与本地事务的最终一致性
  • ‌延迟消息‌:支持 18 个级别的延迟投递(如 1s、5s、10m 等)
  • ‌回溯消息‌:允许消费者重新消费历史消息(按时间或偏移量)

‌扩展性‌

  • 通过增加 Queue 数量提升并发处理能力,支持云原生部署(K8s 友好)

存储机制与设计

‌CommitLog‌

  • 物理存储文件,所有 Topic 的消息按写入顺序追加存储,单个文件默认 1GB
  • 随机读取设计,通过消息物理偏移量定位数据位置

‌ConsumeQueue‌

  • 逻辑队列,存储消息在 CommitLog 中的偏移量、大小和 Tag 哈希值,加速消费查询
  • 每个 Topic-Queue 对应独立的 ConsumeQueue 文件

‌高可用机制‌

  • Broker 主从架构:主节点负责读写,从节点异步复制数据以实现故障切换。 消息重试:支持按次数或时间间隔重投递失败消息

典型应用场景

  • ‌异步解耦‌:分离核心业务与非关键流程(如订单支付与通知)
  • ‌削峰填谷‌:应对突发流量,通过消息堆积缓解下游系统压力
  • ‌分布式事务‌:基于事务消息实现跨系统数据一致性(如库存扣减与订单创建)
  • ‌日志收集‌:聚合多节点日志,供实时计算或离线分析使用

rocketmq的常用命令

rocketmq的基本使用