RocketMQ 是阿里巴巴开源的分布式消息中间件。
RocketMQ 特点
- 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式等特点
- Producer、Consumer、队列都可以分布式
- Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 Consumer 实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 Topic 对应的队列集合
- 能够保证严格的消息顺序
- 支持拉(pull)和推(push)两种消息模式
- 高效的订阅者水平扩展能力
- 实时的消息订阅机制
- 亿级消息堆积能力
- 支持多种消息协议,如 JMS、OpenMessaging 等
- 较少的依赖
RocketMQ 核心概念
Producer
消息生产者,将业务系统生成的消息发送给消息代理(Broker),RocketMQ 提供了多种发送消息的模式:同步(synchronous)、异步(asynchronous)和单向(one-way)。Producer Group
消息生产者组,具有相同角色的消息生产者组合在一起,相同角色可以理解为生产同一类消息。Consumer
消息消费者,从消息代理(Broker)获取消息并将其提供给应用程序。又可以根据消息获取方式分为:
(1) Pull Consumer
积极主动地从消息代理(Broker)中拉取消息,一旦批量消息被拉出,用户应用便启动消息。
(2) Push Consumer
将拉动消息、消费进度和其它维护工作封装起来,留下一个回调接口给最终用户实现,这个接口在消息到达时会被执行。Consumer Group
消息消费者组,同消息生产者组类似,将具有相同角色的消息消费者组合在一起,相同角色可以理解为消费同一类消息。Topic
Topic 是消息的逻辑分类。Message
Message 是发送的信息载体,Message 必须指定 Topic,可以类比信件地址。Message 有一个可选的 Tag 设置便于过滤消息,还可以添加额外的键值对。Message Queue
Topic 会被分为一个或多个 Message QueueTag
Tag 是 Topic 的进一步细分,为用户提供额外的灵活性。同一业务不同目的的消息可以拥有相同的 Topic 和不同的 Tag。Broker
Broker 是 RocketMQ 系统主要组件,接收来自消息生产者的消息,存储这些消息并为消息消费者拉动这些消息做准备,也存储消息相关元数据。Name Server
Name Server 为消息生产者和消费者提供路由信息。Message Model
消息模型:集群(Clustering)和广播(Broadcasting)Message Order
消息顺序:顺序(Orderly)和并发(Concurrently)
RocketMQ 架构
RocketMQ 架构图中展示了四个集群:
NameServer 集群
提供轻量级的服务发现及路由,每个 NameServer 记录完整的路由信息,提供相应的读写服务,支持快速存储扩展。有些其它开源中间件使用 ZooKeeper 实现服务发现及路由功能,如 Apache Kafka。
NameServer是一个功能齐全的服务器,主要包含两个功能:
(1) Broker 管理,接收来自 Broker 集群的注册请求,提供心跳机制检测 Broker 是否存活
(2) 路由管理,每个 NameServer 持有全部有关 Broker 集群和客户端请求队列的路由信息Broker 集群
通过提供轻量级的 Topic 和Queue 机制处理消息存储。同时支持推(Push)和拉(Pull)两种模型,包含容错机制。提供强大的峰值填充和以原始时间顺序累积数千亿条消息的能力。此外还提供灾难恢复,丰富的指标统计数据和警报机制,这些都是传统的消息系统缺乏的。
Broker 有几个重要的子模块:
(1) 远程处理模块,Broker 入口,处理来自客户端的请求
(2) 客户端管理,管理客户端(包括消息生产者和消费者),维护消费者的主题订阅
(3) 存储服务,提供在物理硬盘上存储和查询消息的简单 API
(4) HA 服务,提供主从 Broker 间数据同步
(5) 索引服务,通过指定键为消息建立索引并提供快速消息查询Producer 集群
消息生产者支持分布式部署,分布式生产者通过多种负载均衡模式向 Broker 集群发送消息。Consumer 集群
消息消费者也支持 Push 和 Pull 模型的分布式部署,还支持集群消费和消息广播。提供了实时的消息订阅机制,可以满足大多数消费者的需求。
有关架构图中集群间交互方式的说明:
(1) Broker Master 和 Broker Slave 是主从结构,会执行数据同步 Data Sync
(2) 每个 Broker 与 NameServer 集群中所有节点建立长连接,定时注册 Topic 信息到所有 NameServer
(3) Producer 与 NameServer 集群中的其中一个节点(随机)建立长连接,定期从 NameServer 获取 Topic 路由信息,并与提供 Topic 服务的 Broker Master 建立长连接,定时向 Broker 发送心跳
(4) Producer 只能将消息发送到 Broker Master,但是 Consumer 同时和提供 Topic 服务的 Master 和 Slave 建立长连接,既可以从 Master 订阅消息,也可以从 Slave 订阅消息。
有关 RocketMQ 的更多资料可以参看:
Apache RocketMQ
RocketMQ on Github
阿里中间件团队博客之十分钟入门 RocketMQ
下一篇:RocketMQ 安装部署及运行