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

相关推荐
晚安code4 天前
RocketMQ 顺序消费实战:批量接口加 Redis Pipeline同步数据
redis·rocketmq
晚安code6 天前
RocketMQ 延迟消息实战:延迟双删策略解决 Redis 缓存一致性
redis·rocketmq
风样滴男人哟6 天前
spark streaming消费rocketmq的几种方式
大数据·spark·rocketmq
IT界的老黄牛6 天前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
摇滚侠7 天前
《RocketMQ 官网》阅读笔记 RocketMQ 普通消息 延时消息 顺序消息 事务消息
笔记·rocketmq
阿里云云原生7 天前
RocketMQ 高可用创新论文入选 ACM FSE:无需复制业务数据,实现有状态服务秒级接管
rocketmq
重庆小透明7 天前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
阿里云云原生7 天前
RocketMQ-A2A 创新论文入选 ACM FSE,定义 AI Agent 可靠协作新范式
apache·rocketmq
依晨照旧8 天前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
后端·rocketmq