RocketMQ 磁盘上目录结构
/var/rocketmq/store
├── commitlog # 存储所有消息内容
│ ├── 00000000000000000000
│ ├── 00000000001073741824
│ └── ...
├── config # 存储配置文件
│ ├── consumerOffset.json # 存储消费者的消费进度
│ ├── delayOffset.json # 存储延迟消息进度
│ ├── subscriptionGroup.json # 存储订阅组信息
│ └── topics.json # 存储主题配置信息
├── consumequeue # 存储每个主题的消息队列索引
│ ├── TopicA
│ │ ├── 0
│ │ │ ├── 00000000000000000000
│ │ │ ├── 00000000000000000001
│ │ │ └── ...
│ │ ├── 1
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ └── TopicB
│ ├── 0
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ ├── 1
│ ├── 00000000000000000000
│ ├── 00000000000000000001
│ └── ...
├── index # 存储消息索引文件
│ ├── 20210602101245678
│ ├── 20210602112356789
│ └── ...
└── checkpoint # 存储刷盘进度
├── checkpoint
1. CommitLog 文件
命名规则
- 文件名:CommitLog文件的文件名是根据起始偏移量生成的20位数。例如,文件名
00000000000000000000
表示从偏移量0开始的文件,文件名00000000001073741824
表示从偏移量1073741824(即1GB)开始的文件。
生成规则
- 文件大小:默认情况下,每个CommitLog文件的大小为1GB。这可以通过
broker.conf
文件中的mapedFileSizeCommitLog
参数进行配置。 - 创建新文件:当当前CommitLog文件写满时,系统会创建一个新的CommitLog文件,其文件名是上一个文件的起始偏移量加上1GB。
示例:
/var/rocketmq/store/commitlog
├── 00000000000000000000
├── 00000000001073741824
├── 00000000002147483648
└── ...
2. ConsumeQueue 文件
命名规则
- 文件名:ConsumeQueue文件的文件名是根据起始偏移量生成的20位数。每个主题的每个队列都有一个单独的目录,目录中的文件命名是基于其起始偏移量。
示例:
/var/rocketmq/store/consumequeue
├── TopicA
│ ├── 0
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ ├── 1
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ └── ...
├── TopicB
│ ├── 0
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ ├── 1
│ │ ├── 00000000000000000000
│ │ ├── 00000000000000000001
│ │ └── ...
│ └── ...
生成规则
- 文件大小:每个ConsumeQueue文件的大小固定为6MB,包含30万个消息索引,每条索引占20字节。每条索引记录了消息在CommitLog中的物理偏移量、消息大小和Tag hashcode。
- 创建新文件:当当前ConsumeQueue文件写满时,系统会创建一个新的ConsumeQueue文件,其文件名是上一个文件的起始偏移量加上6MB。
3. Index 文件
命名规则
- 文件名:Index文件的文件名是根据文件的创建时间生成的时间戳。例如,文件名
20210602101245678
表示文件在2021年6月2日10时12分45秒678毫秒时创建。
示例:
/var/rocketmq/store/index
├── 20210602101245678
├── 20210602112356789
└── ...
生成规则
- 文件大小:默认情况下,每个Index文件包含2000万个消息索引,大小为400MB。这可以通过
broker.conf
文件中的maxIndexNum
参数进行配置。 - 创建新文件:当当前Index文件写满时,系统会创建一个新的Index文件,其文件名是文件的创建时间戳。
总结
在默认情况下,RocketMQ使用以下命名和生成规则来管理commitlog、consumequeue和index文件:
-
CommitLog 文件:
- 文件名基于起始偏移量生成的20位数。
- 文件大小默认1GB(可配置)。
- 当文件写满时,创建新的文件,文件名为上一个文件的起始偏移量加上1GB。
-
ConsumeQueue 文件:
- 文件名基于起始偏移量生成的20位数。
- 每个主题的每个队列都有一个单独的目录。
- 文件大小固定为6MB,包含30万个消息索引,每条索引占20字节。
- 当文件写满时,创建新的文件,文件名为上一个文件的起始偏移量加上6MB。
-
Index 文件:
- 文件名基于文件的创建时间生成的时间戳。
- 文件大小默认400MB(可配置),包含2000万个消息索引。
- 当文件写满时,创建新的文件,文件名为文件的创建时间戳。
通过这些命名和生成规则,RocketMQ能够高效地管理消息的存储和检索,确保系统的高性能和可靠性。