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

相关推荐
阿里云云原生3 天前
阿里云云原生四项 AI 应用工程化实荣获“鼎新杯”优秀案例
rocketmq
阿里云云原生3 天前
Qoder Cloud Agents 手脑分离实践:RocketMQ LiteTopic 如何支撑规模化长程 Agent 任务
rocketmq
阳光不锈@4 天前
三大主流消息队列架构设计思想剖析:从 RabbitMQ 到 RocketMQ 的改造实践
kafka·rabbitmq·rocketmq·rabbit改造rocket·去除rabbitmq·rabbitmq改造
薛之谦_9 天前
Java 整合 RocketMQ 实战:从入门到复杂场景落地
java·rocketmq·java-rocketmq
jyOverQ9 天前
从零开始学 RocketMQ(四):集群部署、消息存储与高可用【保姆级教程】
java·rocketmq·java-rocketmq
Thomas.Sir15 天前
第31课:微服务消息驱动(RabbitMQ/RocketMQ)适配与解耦实战
微服务·rabbitmq·rocketmq
Knight_AL15 天前
本地服务连接 SaaS 测试环境实践:Docker 部署 Redis 与 RocketMQ 完成接口联调
redis·docker·rocketmq
jyOverQ15 天前
从零开始学 RocketMQ(一):基础概念、环境搭建与简单消息收发【保姆级教程】
java·rocketmq·java-rocketmq
做个文艺程序员17 天前
MQ第10篇:RAG与消息队列实战:Java构建AI客服系统的检索增强生成完整架构
人工智能·架构·rocketmq·向量数据库·rag·ai客服·spring ai
做个文艺程序员17 天前
MQ第07篇:Java SaaS多租户消息隔离实战:RabbitMQ VHost+RocketMQ Tag+命名空间架构
spring boot·rabbitmq·rocketmq·saas·多租户