分布式消息队列(上):主流MQ的二三事
预计阅读时间:15分钟
|
|
|
|
|
|
|
|
|
|
支持的协议 |
|
|
|
|
|
|
|
|
|
消息事务 |
|
|
|
|
管理界面 |
|
|
|
|
|
|
|
|
|
吞吐量TPS |
|
|
|
|
顺序消息 |
|
|
|
|
|
|
|
|
|
首先根据文件名找到所在的索引文件
然后用二分法遍历索引文件内的索引,找到离目标消息最近的索引
再去消息文件中找到这条最近的索引指向的消息位置,从这个位置开始顺序遍历消息文件,直到找到目标消息
2、RocketMQ
RocketMQ的存储以 Broker 为单位,它的存储也是分为消息文件和索引文件,但是在 RocketMQ 中,每个 Broker 只有一组消息文件,它把在这个 Broker 上的所有主题的消息都存在这一组消息文件中。
索引文件和 Kafka 一样,是按照主题和队列分别建立的,每个队列对应一组索引文件,这组索引文件在 RocketMQ 中称为 ConsumerQueue。RocketMQ 中的索引是定长稠密索引,它为每一条消息都建立索引,每个索引的长度(注意不是消息长度)是固定的 20 个字节。
(1)写入消息
写入消息的时候,Broker 上所有主题、所有队列的消息按照自然顺序追加写入到同一个消息文件中,一个文件写满了再写下一个文件。
(2)读取消息
-
首先根据队列的消息序号,计算出索引的全局位置
-
然后直接读取这条索引 再根据索引中记录的消息的全局位置,找到消息
我们似乎总会在某一年,爆发性地长大,爆发性地觉悟,爆发性地知道某个真相,让原本没有什么意义的时间的刻度,成了一道分界线。
——韩松落《老灵魂》