RocketMQ 是阿里巴巴的分布式消息中间件,在 2012 年开源,在 2017 年成为 Apache 顶级项目。

1 集群架构

RocketMQ 的集群架构如下图:

7张图带你轻松入门 RocketMQ_rocketmq

从上图可以看到,整个集群中有四个角色:

  • Name Server集群
  • Broker主从集群
  • Producer
  • Consumer。
1.1 Name Server 集群

Name Server 集群部署,但是节点之间并不会同步数据,因为每个节点都会保存完整的数据。因此单个节点挂掉,并不会对集群产生影响。

角色和功能:NameServer 负责维护整个消息队列系统中 Broker 的路由信息,提供轻量级的服务发现和路由功能。每个 Broker 启动时会向所有 NameServer 注册自己的路由信息,Producer 和 Consumer 通过查询 NameServer 来获取 Broker 的地址信息。

设计理念:通过提供一个几乎无状态的轻量级服务,RocketMQ 的 NameServer 能够轻松实现集群和负载均衡,同时避免成为系统瓶颈。

1.2 Broker

Broker 采用主从集群,实现多副本存储和高可用。每个 Broker 节点都要跟所有的 Name Server 节点建立长连接,定义注册 Topic 路由信息和发送心跳。

跟所有 Name Server 建立连接,就不会因为单个 Name Server 挂了影响 Broker 使用。Broker 主从模式中, Slave 节点主动从 Master 节点拉取消息。

角色和功能:Broker 是消息处理的核心,负责消息的存储、传输、和检索。它支持长期存储、高性能和高并发的消息处理。Broker 可以按主题对消息进行分类存储,并支持顺序和非顺序消息。

设计理念:为了保证高性能和数据的可靠性,Broker 设计了多层消息存储结构,支持快速的消息写入和消费。同时,它支持主从复制机制,确保高可用。

1.3 Producer

Producer 跟 Name Server 的任意一个节点建立长连接,定期从 Name Server 拉取 Topic 路由信息。Producer 是否采用集群,取决于它所在的业务系统。

角色和功能:Producer 负责生产发布消息到 Broker。它首先从 NameServer 查询 Broker 的路由信息,然后根据负载均衡算法选择一个或多个 Broker 发送消息。

设计理念:通过高效的网络通讯和负载均衡策略,Producer 能够实现快速和可靠地消息发送。

1.4 Consumer

Consumer 跟 Name Server 的任意一个节点建立长连接,定期从 Name Server 拉取 Topic 路由信息。Consumer 是否采用集群,取决于它所在的业务系统。

Producer 和 Consumer 只跟任意一个 Name Server 节点建立连接,因为 Broker 会向所有 Name Server 注册 Topic 信息,所以每个 Name Server 保存的数据其实是一致的。

角色和功能:Consumer 负责从 Broker 订阅和消费消息。它支持拉(Pull)和推(Push)两种模式来获取消息,提供灵活的消费处理方式。

设计理念:Consumer 的设计支持高效的消息拉取和自动消费偏移管理,确保消息的准确处理。同时,支持集群消费和广播消费两种模式,以满足不同的应用需求。

架构图

7张图带你轻松入门 RocketMQ_Server_02

由此可见 NameServer、Broker、Producer、Consumer 都可以搭建成集群部署,并且 Broker 还能搭建主从集群!

RocketMQ 5.0 版本之后,官方引入了一个新的组件:Proxy !!!

消息(Message)

7张图带你轻松入门 RocketMQ_设计理念_03

消息的生命周期

7张图带你轻松入门 RocketMQ_Server_04

2 MessageQueue

Producer 发送的消息会在 Broker 的 MessageQueue 中保存,当然,MessageQueue 并不保存物理消息,而是保存消息的偏移量,详见第 5 节。如下图:

7张图带你轻松入门 RocketMQ_数据_05

有了 MessageQueue ,Topic 的消息就可以在 Broker 中实现分布式存储,如上图,Broker 集群中有 3 个 Broker,保存两个 Topic 的消息。每个 Broker 为 Topic 创建 4 个MessageQueue。

有了 MessageQueue,Producer 可以并发地向 Broker 中发送消息,Consumer 也可以并发地消费消息。

3 Consumer

RocketMQ的消费模式如下图:

7张图带你轻松入门 RocketMQ_Server_06

图中,RocketMQ 集群中有两个 Broker,每个 Broker 上有 4 个 MessageQueue,Topic1 的消息并发写入了这 8 个 MessageQueue。

RocketMQ 通过 Consumer Group1 这个消费者组进行消息拉取。

一个消费者可以消费多个 MessageQueue,但是同一个 MessageQueue 只能被同一个消费者组的一个消费者消费。比如 MessageQueue0 只能被 Consumer Group1 中的 Consumer1 消费, 不能被其他消费者消费。