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...

相关推荐
码上一元12 小时前
消息队列:如何确保消息不会丢失?
kafka·消息队列·rocketmq
bubble小拾1 天前
RocketMQ实战与集群架构详解
架构·rocketmq·java-rocketmq
拾木2003 天前
RocketMQ 消费方式
github·rocketmq·java-rocketmq
我真有起床气3 天前
如何在 Spring Boot 中实现 RocketMQ 的批量消息消费
spring boot·rocketmq·java-rocketmq
花开富贵..9 天前
RocketMQ安装与使用
spring boot·spring cloud·rocketmq
程序员小雷11 天前
字节面试 | 如何测试RocketMQ、RocketMQ?
测试工具·面试·职场和发展·单元测试·测试用例·rocketmq·postman
充值内卷12 天前
ASP.NET Core 入门教学八 集成RocketMQ消息队列
后端·asp.net·rocketmq
甜甜不甜100113 天前
消息中间件 --Kafka
分布式·kafka·rocketmq
lixiaoyi0113 天前
Rocketmq源码分析(1)
rocketmq
阿里云云原生14 天前
基于 RocketMQ 的云原生 MQTT 消息引擎设计
阿里云·云原生·rocketmq