RocketMQ架构

104 阅读3分钟

RocketMQ架构

生产者

注册中心(NameServer)中记录着所有Broker集群的信息
生产者从NS中通过负载均衡机制获取某一个Broker集群
生产者往这个Broker集群的指定队列中投递消息

投递的过程支持快速失败和低延迟

消费者

支持两种模式
a、消费者从队列中pull 拉取消息
b、队列给消费者push 推送消息

提供消息实时订阅机制

集群模式

一个消息只能被集群中的一个消费者消费

广播模式

集群中的每个消费者都会消费

NameServer

支持Broker动态注册与发现

a、每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息
b、ns各实例间相互不进行信息通讯 做灾备使用

BrokerServer

主要功能

重要子模块

路由模块

负责处理客户端请求

客户端模块

负责管理生产者/消费者和维护topic订阅消息

存储服务

提供API接口处理消息存储到物理硬盘和查询功能

高可用服务

提供Master Broker 和 Slave Broker之间的数据同步功能

a、Broker分为Master与Slave
b、Master和Slave是1对多的关系
c、Master和Slave对应关系通过指定相同的BrokerName;
BorkerId=0表示Master,BorkerId=1表示Slave
d、Master也可以部署多个
e、brokerId=1参与消息的读负载

每个Broker与NameServer集群中的所有节点建立长连接
定时注册Topic信息到所有NameServer

索引服务

根据特定的Message key对投递到Broker的消息进行索引服务
以提供消息的快速查询

部署架构

组件启动流程

生产者

Producer与NameServer集群中的其中一个节点(随机选择)
建立长连接
定期从NameServer获取Topic路由信息

生产者向提供Topic 服务的Master建立长连接
且定时向Master发送心跳

消费者

Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接
定期从NameServer获取Topic路由信息

a、消费者向提供Topic服务的Master、Slave建立长连接
且定时向Master、Slave发送心跳
b、Consumer既可以从Master订阅消息,也可以从Slave订阅消息

集群工作流程

服务注册

a、启动NameServer,NameServer起来后监听端口
等待Broker、Producer、Consumer连上来
相当于一个路由控制中心

b、Broker启动
跟所有的NameServer保持长连接
定时发送心跳包
心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息
注册成功后
NameServer集群中就有Topic跟Broker的映射关系

创建topic

收发消息前
先创建Topic
创建Topic时需要指定该Topic要存储在哪些Broker上
也可以在发送消息时自动创建Topic

生产消息

Producer发送消息
启动时先跟NameServer集群中的其中一台建立长连接
并从NameServer中获取当前发送的Topic存在哪些Broker上
轮询从队列列表中选择一个队列
然后与队列所在的Broker建立长连接从而向Broker发消息

消费消息

Consumer跟Producer类似
跟其中一台NameServer建立长连接
获取当前订阅Topic存在哪些Broker上
然后直接跟Broker建立连接通道
开始消费消息