RocketMQ 架构简介

1. 总体架构

RocketMQ通过主从架构和多副本机制来实现高可用和支撑高并发。Broker有Master和Slave两种角色。一个Master可能有多个Slave。
同时还有一个NameServer集群来保存Broker的路由信息,每个Broker都会向NameServer注册,然后每隔30秒发送一个心跳包保持和NameServer的通信。
不管是生产者还是消费者,如果想要从RocketMQ中获取消息,都要通过NameServer获取路由信息,再去找到对应的Broker获取消息。
fw
SlaveBroker会不停的发请求到MasterBroker拉取消息进行同步。

2. RocketMQ的读写分离

写入消息是在MasterBroker上进行的,然后同步给SlaveBroker。但是消费者获取消息的时候一般先从Master上获取,然后Master根据本身的负载情况判断是否要告诉消费者下一次从Slave获取。如果消费者从Slave上获取消息时,Slave发现自己的消息滞后很多,会告诉消费者下次从Master获取。所以RocketMQ的读写是一个动态变化的过程,写操作是一定发生在Master上,读操作两者都可能发生。

3. 高可用

理论上讲,SlaveBroker宕机了不会有什么影响。MasterBroker宕机的话,RocketMQ 4.5版本之前需要人工运维从Slave中选择一个切换MasterBroker。4.5之后通过Dledger来实现选主操作,实际上就是基于Raft算法自动从Slave中选择一个作为新的MasterBroker。

4. 分布式存储

RocketMQ的每个topic的消息都可以分散存储在多台MasterBroker上。这里的分散存储并不是相同数据,和Slave的副本保存不一样。例如某个topic有1000w条消息,那么它们可能分成了4份保存到了4个不同的MasterBroker上,每个Master中保存250w条消息。这些Master的Slave会另外对其做副本保存操作。

实际上在创建topic的时候,我们会指定它对应的MessageQueue的大小。例如上面的例子,一开始设置了MessageQueue的个数为4,那么1000w条数据可能会分散保存在这4个不同的MessageQueue中,可能并不是平均分配。而这4个MessageQueue其实也是分散在不同的MasterBroker上的。如下图:
mq


THE END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值