阿里云-- RocketMQ 为什么说Message Queue100 年内不会溢出,可以认为长度无限

本文围绕RocketMQ展开,指出其消息队列是持久化、长度无限的数据结构,通过Offset访问存储单元。经计算,若系统QPS达到Integer.MAX_VALUE,Offset 100年也够用,虽目前难达此QPS,但理论上RocketMQ队列长度100年可行,可将消息队列视为无限数组,Offset为下标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上下文:

在 RocketMQ 中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储

单元都是定长,访问其中的存储单元使用 Offset 来访问,offset 为 java long 类型,64 位;

解释如下:

Integer.MAX_VALUE = 2147483647                10位
Long.MAX_VALUE=9223372036854775807   19位

假设消息队列生产qps到达 Integer.MAX_VALUE,那么100年数据量是多少呢?

粗略计算: Integer.MAX_VALUE * 36500*86400   = ?

10 + 5 + 5 - 1 = 19位  很接近 Long.MAX_VALUE了  (第一个10 是Integer.MAX_VALUE位数,第二个 5 表示 36500 位数,第三个5 表示 86400 减去 1 )

实际值:

 Integer.MAX_VALUE * 36500*86400 =  6772304429179200000  <  Long.MAX_VALUE 

所以如果系统qps达到了Integer.MAX_VALUE,offset100年也是够用的,但是什么系统能达到qps = Integer.MAX_VALUE ?暂时还为止! 所以使用rmq队列长度理论上100年完全站得住脚的。

可以认为 Message Queue 是一个长度无限的数组,offset 就是下标。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自驱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值