分布式消息中间件(六)——RocketMQ持久化原理

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等

释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码  

通过前面的章节,我们已经知道了数据在RocketMQ中是分布式存储的。生产者发送消息时,先从NameServer获取到路由信息,然后根据一定算法将消息发送到某个Master-Broker中。但是, Topic是一个逻辑概念 ,对于某个Topic来说,属于它的消息分布在不同的Broker上,那如何决定消息到底分布在哪个Broker上呢?

一、MessageQueue

我们在创建Topic时,需要指定一个很关键的参数——MessageQueue,比如下图,我们可以在RocketMQ的可视化工作台里去创建一个名为order_topic的Topic,指定包含4个MessageQueue:

202308012100470911.png

那么Topic、MessageQueue、Broker之间到底是什么关系?

可以先简单的认为: Topic是消息的逻辑分类,消息保存在MessageQueue中,MessageQueue分布在Master-Broker上,Slave-Broker从Master-Broker同步数据。

事实上,MessageQueue本质就是一个数据分片的机制。比如order_topic一共有1万条消息,那么可以大致认为每个MessageQueue保存2500条消息。但是,这不是绝对的,需要根据Producer写入消息的策略来定,可能有的MessageQueue中消息多些,有的少些。我们先暂且认为消息是在MessageQueue上平均分配的,然后MessageQueue也可能平均分布在Master-Broker上,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值