RocketMQ文件命名和生成规则

195 阅读5分钟

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能够高效地管理消息的存储和检索,确保系统的高性能和可靠性。