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

相关推荐
kkkkkkkkl249 小时前
从 ACK 到事务裁决:Spring Boot 中 RocketMQ 事务消息的完整工作机制解析
spring boot·rocketmq·java-rocketmq
予枫的编程笔记1 天前
【Java进阶2】Java常用消息中间件深度解析:特性、架构与适用场景
java·kafka·rabbitmq·rocketmq·activemq
得物技术2 天前
RocketMQ高性能揭秘:承载万亿级流量的架构奥秘|得物技术
后端·rocketmq
星辰_mya2 天前
RocketMQ
java·rocketmq·java-rocketmq
摇滚侠2 天前
RocketMQ 教程丨深度掌握 MQ 消息中间件,rocketmq 安装,控制台,笔记 21-27
笔记·rocketmq·java-rocketmq
摇滚侠2 天前
RocketMQ 教程丨深度掌握 MQ 消息中间件,RocketMQ 集群,笔记 28-38
数据库·笔记·rocketmq
武子康3 天前
Java-218 RocketMQ Java API 实战:同步/异步 Producer 与 Pull/Push Consumer
java·大数据·分布式·消息队列·rocketmq·java-rocketmq·mq
杀死那个蝈坦3 天前
短链接生成-基于布隆过滤器和唯一索引
java·数据库·微服务·oracle·rocketmq
独自破碎E3 天前
消息队列如何保证消息的有效性?
java·开发语言·rocketmq·java-rocketmq
独自破碎E4 天前
消息队列如何处理重复消息?
java·开发语言·rocketmq