rocketMQ中有个store目录,它是用来存放和管理broker中的消息,queue和topic的。
下面的是store的目录
abort:该文件在broker启动后会自动创建,broker关闭后消失,若没有消失则说明该broker非正常关闭。
checkpoint:存储这commitlog、consumequue、index文件最后的刷盘时间。
commitlog:存储着消息。很多资料中commitlog目录中的文件为成为commitlog文件。但在源码中被称为mappedFile。broker中的所有消息实际上都是落盘到mappedFile文件中的(注意:队列queue并不存储在该文件夹中)。mappedFile文件中能容纳的消息大小的最大值为1G。文件名由20位十进制数构成,表示当前文件的第一条消息起始偏移量。 一个broker中的所有mappedFile文件的commitlog offset偏移量是连续的。一个broker只会有一个commitlog目录,无论有多少个topic的消息都会被写入mappedFIle文件,就是说消息没有按照topic分类存放。
config:存放着broker运行期间的一些配置。
consumequeue:存放着队列。每个topic都会在该目录中创建一个目录,目录名为该topic的名字。在该topic目录下,又会为该topic下的每一个queue创建一个目录,目录名为queueId。每个queueId目录中有个consumequeue文件,该文件是commitlog的索引文件,可以定位到commitlog中的具体消息。
index:存放着消息索引文件indexFile。除了通过通常的指定topic进行顺序消费外,还可以根据key进行消息查询的功能(通过indexFile进行索引实现了快速查询)。indexFile中的索引数据是在包含了key的消息被发送到broker时写入的。每个broker都会包含一组indexFIle,每个indexFIle都是以一个时间戳命名的(这个indexFile文件被创建的时间)。每个indexFIle文件由3部分组成:indexHeader,slot槽位,index索引数据。每个indexFile文件中包含500w个slot槽,而每个slot槽肯会挂载很多index索引单元。 当第一条含key的消息发送到broker后,若indexFile文件,就是立即创建一个indexFile文件。当一个indexFile文件中挂载的seindex索引单元数量超出了2000w个时,就会创建系的indexFile。当带key的消息发送来后,系统会找到最新的indexFile。
lock:运行期间使用到的全局资源锁。