首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RockerMQ的架构原理

RockerMQ的架构原理

原创
作者头像
花落花相惜
修改2021-11-25 13:05:46
修改2021-11-25 13:05:46
3700
举报

基于Dledger的Broker主从架构部署

RocketMQ的4.5版本之前如果master故障,是无法自动将slave切换成master的,必须得人工介入,修改配置然后重启。4.5版本之后,引入Dledger技术之后可以实现自动切换。Dledger技术是要求必须得是一个Master带两个slave,这样三个Broker组成一个Group,也就是一个分组来运行,一旦Master宕机,它就可以从剩余的两个slave中选举出一个新的master对外提供服务。

Broker是如何跟NameServer进行通信的

Broker和NameServer之间的通信协议是基于TCP长连接进行通信的。也就是说,Broker会跟每个NameServer都建立一个TCP的长连接,然后定时通过TCP长连接发送心跳请求过去。

RockerMQ的核心数据模型是什么

它的核心数据模型是:topic,它表达的意思就是数据集合的意思。

Topic是如何在Broker集群中存储的。

topic里面的数据是分布式存储的。比如在创建topic的时候是可以指定它里面的数据分散存储在多台Broker机器上的。比如一个topic里有1000万数据,此时有2台Broker,那么就可以让每台Broker上都放500万数据。另外一个重要的事情就是,每个Broker在进行定时的心跳汇报给NameServer的时候,都会告诉NameServer自己当前的数据情况,比如都有哪些topic的那些数据在自己这里,这样每个NameServer就都知道了集群中

的Broker都存放了哪些topic的数据了。

生产者是如何将消息发送给Broker的

生产者会向NameServer拉取路由信息,找到自己要发送信息的topic是在那台机器上,此时根据负载均衡算法,从里面选择一台Broker机器出来,比如采用round

robine轮询算法,或者hash算法等。这里需要注意的就是,生产者一定是发送信息给Master Broker的,然后Master

Broker再同步数据给它的Slave Brokers,实现一分数据多分副本。

消费者是如何从Broker上拉取消息的

消费者系统其实和生产者类似的,它们也会和Nameserver建立长连接,然后拉取路由信息,接着找到自己要获取消息的topic在那几台Broker上,就可以和Broker建立长连接,从里面拉取消息了。这里需要注意的一点就是,消费者系统可能会从Master

Broker拉取消息,也可能会从Slave Broker拉取消息,都有可能,会根据当时Master

Broker节点的负载情况和slave的数据同步情况,再从master broker拉取消息的时候,master

broker会返回下次该去哪里拉取消息的建议,是该继续从master上拉取还是从slave上拉取。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档