RocketMQ源码分析----消息存储

文件目录



相关文件

commitlog:

消息存储的地方,文件夹下有多个文件,每个文件的大小默认为1G

消息的组成:

字段名(长度)

备注

 

TOTALSIZE(4)

消息的长度

 

MAGICCODE(4)

 

 

BODYCRC(4)

Body的校验码

 

QUEUEID(4)

队列id

 

FLAG(4)

 

 

QUEUEOFFSET(8)

保存着队列下消息的数量,该值保存在CommitLogtopicQueueTable(map)中,keytopic-queueId

 

PHYSICALOFFSET(8)

Commitlog里的offset

=fileFromOffset+bytebuffer当前的位置

 

SYSFLAG(4)

用来判断消息的类型

 

BORNTIMESTAMP(8)

消息产生的时间

 

BORNHOST(8)

发送消息的consumerip

 

STORETIMESTAMP(8)

存储时间

 

STOREHOSTADDRESS(8)

存储的broker的地址

 

RECONSUMETIMES(4)

重新消费的次数

 

Prepared Transaction Offset(4)

事务状态的消息

 

bodyLength(4)

消息体大小

 

BODY

消息体

 

topicLength(1)

Topic大小

 

topicData

topic

 

propertiesLength(2)

属性大小

 

propertiesData

属性



consumequeue:

consumequeue下有多个文件夹,名字为topic的名字

topic下有多个文件夹,名字为该topic下队列,0~3(假设有4个队列)

然后下面就是保存consumequeue数据的文件

组成:

CommitLog offset(8)

保存的值为CommitLogPHYSICALOFFSET

Size(4)

保存的值为CommitLogTOTALSIZE

Message tag HashCode(8)

tag的哈希值

在取消息的时候,会先用offset取出consumequeue,然后从consumequeue中取出CommitLog offset,然后再到CommitLog里取消息



config

config文件夹下主要保存:

consumerOffset.json:客户端消费offset

内容如下:

{

"offsetTable":{

"topic@消费组名":{

队列:消费进度

},

"%RETRY%消费组名@group_1":{//重试队列

队列:消费进度

}

}

}

delayOffset.json:延迟消费信息

subscriptionGroup.json:订阅信息

topics.jsontopic信息


index:

RocketMQ的索引,发送消息之后可以通过queryMsgByKey来查找消息

组成:

Key Hash4

CommitLog Offset8

Timestamp4

Next Index Offset4

Keyhash

commitlog的物理偏移量phyOffset

存储了当前消息跟索引文件中第一个消息在broker落地的时间差

如果存在hash冲突,存储的是上一个消息的索引地址




相关类

MapedFile

ByteBuffer的封装,创建文件,写入消息,读取消息等操作都是在这里做的

主要字段解释:

fileName:映射的文件名

fileFromOffset:映射的起始偏移量,拿commitlog文件来举例,下面有很多个文件夹(假设为1KB,默认是1G大小),第一个文件名为00000000000000000000,第二个文件名为00000000000000001024,那么第一个文件的fileFromOffset就是0,第二个文件的fileFromOffset就是1024

fileSize:文件大小

wrotePostion:记录当前文件写到什么文件

committedPosition:记录当前文件刷盘刷到哪个位置


MapedFileQueue:

相同类型文件集中管理的地方,管理着MapedFile,其中的文件大小相同,存储位置相同

主要字段解释:

storePath:文件存储位置

mapedFileSize:每个文件的大小

mapedFilesMapedFile的集合,代表着各个文件


CommitLog:

物理队列,对外提供消息的处理接口,内部操作MapedFileQueue


ConsumeQueue:

逻辑队列,对应着consumequeue下的文件,其中保存着CommitLog的位置




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值