RocketMQ---消息存储
概述
RocketMQ的 消息 存储在 本地文件系统中,默认路径:$home/store下;
abort
该文件在 broker启动后自动创建,正常关闭broker,该文件会消失;
若 在未启动broker的情况下,发现该文件存在,说明broker的关闭是非正常关闭;
checkpoint
存储 commitlog、consumequeue、index文件 最后的刷盘时间戳;
...
commitlog
commitlog目录及mappedFile
commitlog目录中 存储着 很多的mappedFile文件;
当前broker中的所有消息 都是落盘到 这些mappedFile中;
mappedFile文件大小为1G(<=1G);
mappedFile文件名 由 20位十进制数构成,左边补0,右边为起始偏移量;
mappedFile当第一个文件写满,第二个文件的名称为上个的起始偏移位置;
一个broker中仅有一个commitlog目录,所有的mappedFile文件都是存储在该目录下;
无论当前broker存放多少topic的消息,这些消息都是被 顺序写入到mappedFile中;
(消息在broker的存放 没有按照topic进行分类存储)
mappedFile 文件是顺序读写,所以访问效率很高;
消息单元
mappedFile文件是 由一个个消息单元组成;
每个消息单元包含:消息总长MsgLen、消息的物理位置physicalOffset、消息内容Body、消息体长度BodyLength、消息主题topic、消息生产者BornHost、消息发送时间戳BornTimeStamp、消息所在队列QueueId、消息在队列的偏移量QueueOffset...
consumequeue
为了 提高查询效率,在 consumequeue 为每个topic下创建一个目录,名称为topic;
在该topic目录下,为每个该topic的queue创建一个目录,名称为队列ID;
每个queue目录下,存放着若干的 consumequeue文件;
consumequeue文件 是 commitlog的索引文件(可以根据consumequeue定位到具体的消息);
consumequeue文件
每个consumequeue文件 可以包含30w个索引条目;
每个索引条目 包含:消息在mappedFile中的偏移量commitlog Offset、消息长度、消息tag;
index
除了通过 topic 进行消息消费外,还提供了根据Key进行消息查询的功能;
通过store目录下的index中的index文件进行索引实现的快速查询(只有包含Key的消息才被写入);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)