RocketMQ 存储文件
磁盘存储文件
-rw-r--r-- 1 root root 0 Jan 18 11:54 abort -rw-r--r-- 1 root root 4.0K Mar 14 17:39 checkpoint drwxr-xr-x 2 root root 34 Feb 14 14:33 commitlog drwxr-xr-x 2 root root 280 Mar 14 17:40 config drwxr-xr-x 7 root root 138 Feb 20 10:28 consumequeue drwxr-xr-x 2 root root 31 Feb 20 10:18 index -rw-r--r-- 1 root root 4 Feb 20 10:18 lock abort:RocketMQ 启动时生成,正常关闭时删除,如果启动时存在该文件,代表 RocketMQ 被异常关闭 checkpoint:文件检查点,存储 commitlog 、consumequeue、indexfile 最后一次刷盘时间或时间戳 index:消息索引文件存储目录 consumequeue:消息消费队列存储目录 commitlog:消息存储目录 config:运行时的配置信息,包含主席消息过滤信息、集群消费模式消息消费进度、延迟消息队列拉取进度、消息消费组配置信息、topic配置属性等
CommitLog 文件
drwxr-xr-x 2 root root 34 Feb 14 14:33 . drwxr-xr-x 6 root root 113 Feb 14 13:59 .. -rw-r--r-- 1 root root 1.0G Mar 14 17:48 00000000000000000000 -rw-r--r-- 1 root root 1.0G Mar 19 21:33 00000000006000000000
文件名为 20 位数字组织,以该文件第一条消息的偏移量为文件名,长度不足 20 的在前面补 0。文件默认大小为 1G,可根据 mappedFileSizeCommitLog 属性改变文件大小。
存储所有消息内容,写满一个文件后生成新的 commitlog 文件。所有 topic 的数据存储在一起,逻辑视图如下:
ConsumeQueue 文件
RocketMQ 基于主题的订阅模式实现消息消费,由于同一主题的消息不连续的存储在 CommitLog 文件中,遍历 CommitLog 文件会导致效率非常低下,为了适应消息消费的检索需求,设计了消息消费队列文件。一个 ConsumeQueue 文件可以作为检索指定 topic 的消息索引。
[root@xxxx consumequeue]# tree -L 3 |-- smsCallbackReply | |-- 0 | | `-- 00000000000000000000 | |-- 1 | | `-- 00000000000000000000 | |-- 2 | | `-- 00000000000000000000 | `-- 3 | `-- 00000000000000000000 |-- smsCallbackStatus | |-- 0 | | |-- 00000000000000000000 | | `-- 00000000000006000000 | |-- 1 | | |-- 00000000000000000000 | | `-- 00000000000006000000 | |-- 2 | | |-- 00000000000000000000 | | `-- 00000000000006000000 | `-- 3 | |-- 00000000000000000000 | `-- 00000000000006000000
ConsumeQueue 文件存储消息的逻辑偏移量,而不存储消息的全部内容,存储格式如下:
Index 索引文件
RocketMQ 引入了 Hash 索引机制为消息建立索引,对 CommitLog 进行数据索引。索引文件布局如下:
IndexHead 数据: beginTimestamp:该索引文件包含消息的最小存储时间 endTimestamp:该索引文件包含消息的最大存储时间 beginPhyoffset:该索引文件中包含消息的最小物理偏移量(commitlog 文件偏移量) endPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog 文件偏移量) hashSlotCount:hashslot个数,并不是 hash 槽使用的个数,在这里意义不大, indexCount:已使用的 Index 条目个数 Hash 槽: 一个 IndexFile 默认包含 500W 个 Hash 槽,每个 Hash 槽存储的是落在该 Hash 槽的 hashcode 最新的 Index 的索引 Index 条目列表 hashcode:key 的 hashcode phyoffset:消息对应的物理偏移量 timedif:该消息存储时间与第一条消息的时间戳的差值,小于 0 表示该消息无效 preIndexNo:该条目的前一条记录的 Index 索引,hash 冲突时,根据该值构建链表结构
Checkpoint 文件
记录 CommitLog,ConsumeQueue,IndexFile 的刷盘时间点,文件固定长度为 4k,其中只用该文件的前 24个字节,存储格式如下:
相关推荐
LCFlxfldy 2020-08-17
IT农场 2020-11-13
ljcsdn 2020-07-27
LCFlxfldy 2020-07-05
lypgcs 2020-06-27
陈晨软件五千言 2020-06-17
qingyuerji 2020-06-14
MojitoBlogs 2020-06-14
lypgcs 2020-06-14
陈晨软件五千言 2020-06-14
meilongwhpu 2020-06-13
陈晨软件五千言 2020-06-11
qingyuerji 2020-06-09
MojitoBlogs 2020-06-09
meilongwhpu 2020-06-08
meilongwhpu 2020-06-08
lypgcs 2020-06-07
MojitoBlogs 2020-06-04
meilongwhpu 2020-05-30