Skip to content
章节导航

RocketMQ 消息存储 CommitLog

消息存储是由ConsumeQueue和CommitLog配合完成

ConsumeQueue:

ConsumeQueue 是逻辑队列, CommitLog 是真正存储消息文件的,存储的是指向物理存储的地址
Topic下的每个 message queue 都有对应的 ConsumeQueue 文件,内容也会被持久化到磁盘
默认地址: store/consumequeue/{topicName}/{queueid}/fileName

什么是CommitLog:

  • 消息文件的存储地址
  • 生成规则:
shell
每个文件的默认1G =1024 * 1024 * 1024 ,  commitlog的文件名fileName,名字长   度为20位,左边补零,剩余为起始偏移量;比如00000000000000000000代表了   第—个文件,起始偏移量为0,文件大小为1G=1 073 741 824Byte;当这个文件满 了,第二个文件名字为00000000001073741824,起始偏移量为1073741824, 
息存储的时候会顺序写入文件,当文件满了则写入下—个文件
  • 判断消息存储在哪个 CommitLog 上
    例如 1073742827 为物理偏移量,则其对应的相对偏移量为 1003 = 1073742827 - 1073741824,并且该偏移量位于第二个 CommitLog。

Broker里面—个Topic

  • 里面有多个 MessageQueue
  • 每个 MessageQueue 对应—个 ConsumeQueue
  • ConsumeQueue 里面记录的是消息在 CommitLog 里面的物理存储地址