rocketmq MessageQueue到底有几个?

最简单情况

一般一个业务,一个topic。

topic是程序员侧,即业务侧,需要关心的东西。也是最小单位。


一个topic,怎么存储?

队列。

所以,真正存储消息的是队列。队列是存储侧,即技术侧,这个是消息中间件需要关心的事情。是存储层的最小单位。


那到底需要几个队列?

最简单的情况,当然是一个队列。

即一个topic,一个队列。

如果多个topic,那就多个队列。即不同的topic,用不同的队列。


举例,支付系统,在支付成功之后,通知商户成功是一个业务topic,记账是一个业务topic,d0代付是一个topic。

那么,总共有3个topic,每个topic用自己的队列,所以总共也有3个队列。

rocketmq

刚才上面的例子,是最简单的情况,即只有一个topic,一个队列。或者是有多个topic,然后有多个队列。这都是最简单的情况。

那复杂一点的情况是什么样呢?一个topic,包含多个队列。

为什么要包含多个队列?其实就是为了提高性能。如果只有一个队列,就只能在一个地方先进先出。现在有多个,就可以在多个地方同时先进先出。


说白了,就是在同一个broker节点,每个topic,都包含多个队列。默认值是4。

其实就是单个broker,每个topic的队列数量是4。

如果有多个broker,那么就再乘以broker的数量,就是队列的总数量。


官方文档

defaultTopicQueueNums 4 在发送消息,自动创建服务器不存在的topic时,默认创建的队列数

github.com/apache/rock...

总结

所以,有两点:

1、单个broker,每个topic,都包含多个队列,虽然默认是4,但是具体是几,其实不重要,重要的是包含多个,多个的目的就是为提高性能。

2、每个topic的队列的总数量,就是单个Broker的队列数量,再乘以broker节点数量。那为什么要搞broker集群?高性能,为了负载均衡,本质是分片,即每个节点只包含部分数据,如果出了问题,不影响其他节点。正常情况下,一个broker节点,搞一个队列即可,但是现在是包含多个队列,所以节点分片之后,节点内部,还继续分片,本质是分片的粒度更细了。分片的本质,是为了提高性能。分库分表,本质也是分片,也是为了提高性能,提高存储层的性能。

blog.csdn.net/fedorafrog/...

物理文件只有一个

单个broker,虽然一个topic,包含多个队列。但是单个broker,只有一个物理文件(CommitLog),按顺序写入,确保消息的写入顺序。

github.com/apache/rock...

相关推荐
凤山老林2 天前
RocketMQ 5.0 实战避坑与调优:事务、延迟、轨迹及高可用落地指南
spring boot·rocketmq
heimeiyingwang2 天前
【中台·技术篇】消息队列中台:Kafka/RocketMQ 统一管理与多租户隔离
kafka·rocketmq·中台
hey you~4 天前
云客服多渠道统一接入,消息队列技术实现方案
kafka·消息队列·rocketmq·系统集成·云客服·多渠道接入·接口对接
letisgo57 天前
JAVA 高级进阶10篇《消息队列实战:RocketMQ/Kafka选型与“不丢不重有序“三连解》
java·面试·kafka·消息队列·rocketmq
小楼昨夜又东风1268 天前
kafka、rocketmq、rabbitmq,有什么区别
kafka·rabbitmq·rocketmq
一本正经的不务正业10 天前
kafka与RocketMQ的不同
分布式·kafka·rocketmq
阿里云云原生11 天前
深入解析 RocketMQ LiteTopic:如何以百万级轻量主题实现用户级消息治理?
rocketmq
oliver_sys_log15 天前
RocketMQ 4.5.1 延迟消息"发送成功但消费不到"排查分析报告
后端·rocketmq
深念Y20 天前
视频平台架构重构:从微服务到可插拔基础设施
后端·微服务·云原生·架构·rabbitmq·音视频·rocketmq
阿里云云原生22 天前
深入解析 RocketMQ LiteTopic:从 Parent Topic 到会话级通道的架构演进
rocketmq