RocketMQ是一款分布式、队列模型的消息中间件,有如下部分组成:架构
一、NameServer: 一个几乎无状态的节点,可集群部署,节点之间无任何信息同步异步
二、Broker:是RocketMQ的核心组成部分,经过轻量级的Topic和队列机制来维护消息存储,Broker支持消息Push和Pull模式。支持千亿级别的消息堆积能力分布式
三、Producer:消息生产者,和NameServer通讯获取topic路由信息,和NameServer保持长链接以及和该生产者关联的全部broker保持长链接函数
四、Consumer:消费者,单个消费者和一台nameserver保持长链接,定时查询topic配置信息,根据topic路由和broker保持长链接源码分析
一、单master模式:这种方式风险较大,一旦Broker 重启或者宕机时,会致使整个服务不可用,不建议线上环境使用。性能
二、多master模式:一个集群无 Slave,全是 Master,例如:3 个 Master编码
优势:配置简单,单个Master 宕机或重启维护对应用无影响,在磁盘配置为 RAID10 时,即便机器宕机不可恢复状况下,由与 RAID10 磁盘很是可靠,消息也不会丢(异步刷盘丢失少许消息,同步刷盘一条不丢)。性能最高。spa
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复以前不可订阅,消息实时性会受到受到影响。3d
三、多master多slave模式、异步复制netty
每一个 Master 配置一个 Slave,有多对Master-Slave,HA 采用异步复制方式,主备有短暂消息延迟,毫秒级。
优势:即便磁盘损坏,消息丢失的很是少,且消息实时性不会受影响,由于 Master 宕机后,消费者仍然能够从 Slave 消费,此过程对应用透明。不须要人工干预。性能同多 Master 模式几乎同样。
缺点:Master 宕机,磁盘损坏状况,会丢失少许消息。
四、多master多slave、同步双写
每一个 Master 配置一个 Slave,有多对Master-Slave,HA 采用同步双写方式,主备都写成功,向应用返回成功。
优势:数据与服务都无单点,Master宕机状况下,消息无延迟,服务可用性与数据可用性都很是高
缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT 会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。
图片借鉴:
一、MQ功能模块:
rocketmq-remoting:通讯组件模块,提供通讯须要的编码解码器,主要接口:
a、RemotingService:顶级接口
//nettyconfig配置启动NIO监听端口服务(ServerBootstrap)serverBootstrap.bind().sync()
public void start();
//关闭服务端口
public void shutdown();
//注册rpc响应钩子
public void registerRPCHook(RPCHook rpcHook);
b、RemotingServer:实现RemotingService,提供注册请求处理器和调用方式
c、RemotingClient:实现RemotingService,远程通讯,Client接口
d、ChannelEventListener:提供连接,关闭,异常,空闲事件监听接口
主要接口图:
Rocketmq-namesrv:对应NameServer服务实例,一些时序图:
rocketmq-broker:Broker集群功能代码
BrokerStartup:启动入口,提供命令参数解析,加载netty server,netty client,broker,messagestore配置初始化
BrokerController:初始化topicManager,consumerOffsetManager加载offset,以及subscriptionGroupManager加载消费组信息,messagestore加载commit log组装consumer queue创建索引
FilterServerManager: 是对rocketmq-filtersrv过滤服务模块封装的接口,提供Tag过滤支持
ConsumerOffsetManager:消费进度管理
SlaveSynchronize:slave从master同步topicConfig、offset进度、delayOffset进度、subscribeptionGroup信息
SubscriptionGroupManager:用来管理订阅组,包括订阅权限等
TopicConfigManager:Topic配置管理
SendMessageProcessor:处理客户端发送消息的请求
QueryMessageProcessor:查询消息请求处理
PullMessageProcessor:拉消息请求处理
ClientManageProcessor:Client注册与注销管理
包路径信息:
broker启动流程:
rocketmq-store:存储层原理
DefaultMessageStore:负责管理consumerqueue,commitlog
ConsumeQueue:由topic和queueId组成
Commitlog:负责消息存储
MapedFileQueue:存储消息对应的位置
MapedFile:消息对应磁盘位置
类图:
存储时序:
rocketmq-client:包括producer和consumer、admin
a、producer:提供了多种发送消息接口(回调,超时,指定MessageQueue),相关类图:
a、Consumer:包括push创建长链接后的被动消费(subscribe),以及pull拉取方式
MessageModel:集群和广播消费模式
如下是接口对比:
Pull拉取时序:
Push时序:最终经过PullMessageService回调注册的回调函数PullCallback,在调用consumer注册的回调listener