消息队列(三)RocketMQ如何存储消息

Rocket的消息是有consume queue和commit log组成。


Consume Queue

Consume queue是消息的逻辑队列,相当于字典目录,用来指定消息在物理文件(commit log)上的位置,我们可以在配置中指定consumequeue和commitlog存储的目录。每一个topic下的每个queue都有一个对应的consumqueue文件。

5.png

  • 根据topic和queueid来组织文件,topicA中有2个队列(0和1),那么topicA和queueID=0就组成一个consume queue,另外topicA和queueID=1就组成另外一个consume queue

  • 按照消费端的GroupNanme来分组重试队列,如果消费端消费失败,消息将被发往重试队列,图中的%RETRY%ConsumerGroupA

  • 按照消费端的GroupName来分组死信队列,如果消费端消费失败,并重试指定次数后,仍然失败,则发往死信队列(用于存放无法传递的消息),图中的%DLQ%ConsumerGroupA

Consume queue中的存储单元是20字节长度的二进制数据,顺序读写

6.png

  • commitLog Offset,这条消息在commit log中的实际偏移量

  • size存储的是这条消息的大小

  • message tag hashcode,是存储这个消息的TAG的哈希值,用于订阅时消息过滤


Commit Log

消息存放的物理文件,每台broker上的commit log被本机所有的queue共享不做任何区分。消息存储内容长度不固定,文件顺序写,随机读。








      本文转自linuxjavachen  51CTO博客,原文链接:http://blog.51cto.com/littledevil/2068723,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值