mq存储文件

存储文件

启动broker之后我们可以看到下面这些文件

 

1.config包含了运行期间一些配置信息,主要包括下列信息。

 

consumerFilter.json:主体消息过滤信息

consumerOffset.json:集群消费模式消息消费进度

delayOffset.json:延时消息队列拉取进度

subscriptionGroup.json:消息消费组配置

topic.json:topic配置属性

2.consumequeue:消息消费队列存储目录。

3.index:消息索引文件存储目录

4.abort:如果存在abort文件说明Broker非正常关闭,该文件默认启动时创建,正常退出前删除。

5.checkpoint:文件检查点,存储commitlog文件最后一次刷盘时间戳,consqueue最后一次刷盘时间,index索引文件最后一次刷盘时间戳。

 

commitlog每条消息的前面4个字节存储该条消息的总长度。

commitlog文件默认大小为1G,可通过broker配置文件中设置mappedFileSizeCommitLog属性来改变大小。

commitlog消息的查找

Commitlog#getMinOffset

 

 

获取当前Commitlog目录的最小偏移量,首先获取目录的第一个文件,如果文件可用则返回该文件的起始偏移量,否则返回下一个文件的起始偏移量

根据偏移量与消息长度查找消息:

如果只根据消息偏移查找消息,则首先找到文件内的偏移量,然后尝试读取4字节获取消息的实际长度,最后读取指定字节即可。

 

ConsumeQueue文件

ConsumeQueue文件可以看成是Commitlog关于消息消费的“索引”文件,consumequeue第一级目录为消息主题,第二级目录为主题的消息队列:

 

 

每一个Consumequeue条目不会存储消息的全量信息,8字节commitlog offset+4字节size+8字节tag hashcode 

单个ConsumeQueue文件默认包含30w个条目,单个文件的长度为30w*20字节,单个ConsumeQueue文件可以看出是一个"ConsumeQueue条目"的数组,其下标为ConsumeQueue的逻辑偏移量,消息消费进度存储的偏移量即逻辑偏移量。其构建机制是当消息到达Commitlog文件后,由专门的线程产生消息转发任务,从而构建消息消费队列文件与下文提到的索引文件。

根据逻辑偏移消费消息:

ConsumeQueue#getIndexBuffer:

 

根据消息存储时间来查找:

 

二分查找法通过偏移量找时间,然后对比时间戳,先根据mappFile从commitlog中选中一段,再二分查找

 

posted @ 2020-01-21 15:41  l2c  阅读(595)  评论(0)    收藏  举报