RocketMQ是一个分布式消息和流处理平台,具有低延迟、高性能和高可靠、万亿级容量和灵活的可扩展性。它由四部分组成:NameServer,Broker,Producer,Consumer。它们中的每一个都可以水平扩展,而没有单一的故障节点。

一、RocketMQ的架构

RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分构成,所有的集群都具有水平扩展能力,无单点障碍,如下图所示。




rocketmq Java 集成客户端 rocketmq 集群架构_服务发现

RocketMQ Architecture整体架构



1.1 NameServer Cluster

NameServer 提供轻量级服务发现和路由。每个NameServer 记录完整的路由信息,提供相应的读写服务,并支持快速存储扩展。

1.2 Broker Cluster

Broker 通过提供轻量级的TOPIC和QUEUE机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),并提供强大的峰值填充和按原始时间顺序累积数千亿条消息的能力。此外,Brokers还提供灾难恢复,丰富的指标统计和警报机制,所有这些都缺乏传统的消息传递系统。

1.3 Producer Cluster

Producer 支持分布式部署。Distributed Producers通过多种负载均衡模式向Broker集群发送消息。发送过程支持快速故障并具有低延迟。

1.4 Consumer Cluster

消费者也支持Push和Pull模型中的分布式部署。它还支持群集消费和消息广播。它提供实时消息订阅机制,可以满足大多数消费者的需求。RocketMQ的网站为感兴趣的用户提供了一个简单的快速入门指南。

二、RocketMQ的核心组件

从上面的架构图上也可以看出来RocketMQ的四个核心组件。下图为简单的描述一下关系:




rocketmq Java 集成客户端 rocketmq 集群架构_服务器_02

RocketMQ-Core-Component核心组件



下面我们将详细的了解一下各个组件的作用:

2.1 NameServer

  • 1.作用:提供轻量级的服务发现了路由(类似Kafka中zk的作用),主要负责对源数据的管理,包括对Topic和路由信息的管理。
  • 2.描述:NameSvr角色类似于Kafka中的zk,但是它和zk相比更加轻量,因为每个NameSvr节点之间是相互独立的,没有任何信息的交互。
  • 3.功能: Broker Management,NameServer接受来自Broker集群的寄存器,并提供心跳机制来检查Broker是否存活。 路由管理,每个NameServer将保存有关Broker群集的整个路由信息和客户端查询的队列信息。
  • 4.客户端交互众所周知,RocketMQ客户端(生产者/消费者)将从NameServer查询队列路由信息,但客户端如何查找NameServer地址?将NameServer地址列表提供给客户端有四种方法: 程序化方式,如producer.setNamesrvAddr("ip:port")。 Java选项,使用rocketmq.namesrv.addr。 环境变量,使用NAMESRV_ADDR。 HTTP端点。

2.2 Broker

  • 1.作用:负责消息的存储和转发,消息的中转角色,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型,官网显示:具有上亿消息堆积能力,同时可严格保证消息的有序性。
  • 2.描述:Broker是具体提供业务的服务器,单个Broker节点与所有的NameSvr节点保持长连接及心跳,并会定时将Topic信息注册到NameServer,底层的通信和连接都是基于Netty实现的。
  • 3.组成: Broker服务器有几个重要的子模块,如下图所示:RocketMQ-BrokerServer-Component 远程处理模块,即代理的条目,处理来自client的请求。 client manager,管理client(生产者/消费者)并维护消费者的主题订阅 Store Service,提供简单的API来存储或查询物理磁盘中的消息 HA服务,提供主代理和从代理之间的数据同步功能 索引服务,按指定密钥构建消息索引,并提供快速消息查询

2.3 Producer

  • 1.作用:消息生产者,负责消息生产。
  • 2.描述:Producer 由用户进行分布式部署,消息由 Producer 通过多种负载均衡模式发送到 Broker 集群,发送低延时,支持快速失败。

2.4 Consumer

  • 1.作用:消息消费者,负责消息消费。
  • 2.描述:Consumer 由用户部署,支持推和拉两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制,满足大多数消费场景。

2.5 交互流程

Broker在启动的时候会去向NameServer注册并且定时发送心跳,Producer在启动的时候会到NameServer上去拉取Topic所属的Broker具体地址,然后向具体的Broker发送消息。




rocketmq Java 集成客户端 rocketmq 集群架构_客户端_03

RocketMQ-Interactive 交互图



参考文档

  • 1.RocketMQ Architecture

结束语

本篇主要是先从RocketMQ的整体架构入手,然后逐步认识了一下RocketMQ中的核心组件。相信看完这篇文章后大家会对RocketMQ的核心组件都有了一定的认识。下一篇,我们会结合代码的结构来分析一下源码包中的各个项目。