文件目录
相关文件
commitlog:
消息存储的地方,文件夹下有多个文件,每个文件的大小默认为1G
消息的组成:
字段名(长度) | 备注 |
|
TOTALSIZE(4) | 消息的长度 |
|
MAGICCODE(4) |
|
|
BODYCRC(4) | Body的校验码 |
|
QUEUEID(4) | 队列id |
|
FLAG(4) |
|
|
QUEUEOFFSET(8) | 保存着队列下消息的数量,该值保存在CommitLog的topicQueueTable(map)中,key为topic-queueId |
|
PHYSICALOFFSET(8) | Commitlog里的offset =fileFromOffset+bytebuffer当前的位置 |
|
SYSFLAG(4) | 用来判断消息的类型 |
|
BORNTIMESTAMP(8) | 消息产生的时间 |
|
BORNHOST(8) | 发送消息的consumer的ip |
|
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) | 保存的值为CommitLog的PHYSICALOFFSET |
Size(4) | 保存的值为CommitLog的TOTALSIZE |
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.json:topic信息
index:
RocketMQ的索引,发送消息之后可以通过queryMsgByKey来查找消息
组成:
Key Hash(4) | CommitLog Offset(8) | Timestamp(4) | Next Index Offset(4) |
Key的hash值 | commitlog的物理偏移量phyOffset | 存储了当前消息跟索引文件中第一个消息在broker落地的时间差 | 如果存在hash冲突,存储的是上一个消息的索引地址 |
相关类
MapedFile:
ByteBuffer的封装,创建文件,写入消息,读取消息等操作都是在这里做的
主要字段解释:
fileName:映射的文件名
fileFromOffset:映射的起始偏移量,拿commitlog文件来举例,下面有很多个文件夹(假设为1KB,默认是1G大小),第一个文件名为00000000000000000000,第二个文件名为00000000000000001024,那么第一个文件的fileFromOffset就是0,第二个文件的fileFromOffset就是1024
fileSize:文件大小
wrotePostion:记录当前文件写到什么文件
committedPosition:记录当前文件刷盘刷到哪个位置
MapedFileQueue:
相同类型文件集中管理的地方,管理着MapedFile,其中的文件大小相同,存储位置相同
主要字段解释:
storePath:文件存储位置
mapedFileSize:每个文件的大小
mapedFiles:MapedFile的集合,代表着各个文件
CommitLog:
物理队列,对外提供消息的处理接口,内部操作MapedFileQueue
ConsumeQueue:
逻辑队列,对应着consumequeue下的文件,其中保存着CommitLog的位置