RocketMQ 消息存储格式
RocketMQ 是一个分布式消息中间件,广泛应用于大规模分布式系统中。为了确保消息的高效存储和快速检索,RocketMQ 设计了一套独特的消息存储格式。本文将详细介绍 RocketMQ 消息存储格式的结构、存储方式以及实际应用场景。
什么是RocketMQ消息存储格式?
RocketMQ 的消息存储格式是指消息在磁盘上的存储方式。RocketMQ 将消息存储在 CommitLog 文件中,并通过索引文件(IndexFile)和消费队列(ConsumeQueue)来加速消息的检索。这种设计使得 RocketMQ 能够高效地处理海量消息,同时保证消息的可靠性和持久性。
核心组件
- CommitLog:存储所有消息的原始数据,按顺序写入。
- ConsumeQueue:存储消息的消费队列,用于快速定位消息。
- IndexFile:存储消息的索引,用于快速查找消息。
CommitLog 文件结构
CommitLog 是 RocketMQ 存储消息的核心文件。所有消息都按顺序写入 CommitLog 文件,确保写入的高效性。每条消息在 CommitLog 中的存储格式如下:
| 消息长度 (4字节) | 消息内容 (变长) | 消息属性 (变长) |
- 消息长度:表示消息内容的总长度。
- 消息内容:包含消息的主题、标签、键值对等信息。
- 消息属性:包含消息的附加属性,如延迟时间、重试次数等。
备注
CommitLog 文件的大小是固定的,默认情况下为 1GB。当文件写满后,RocketMQ 会创建一个新的 CommitLog 文件。
ConsumeQueue 文件结构
ConsumeQueue 是 RocketMQ 用于加速消息检索的索引文件。每个主题(Topic )对应一个 ConsumeQueue,存储消息在 CommitLog 中的偏移量。ConsumeQueue 的存储格式如下:
| CommitLog 偏移量 (8字节) | 消息大小 (4字节) | 消息标签哈希值 (8字节) |
- CommitLog 偏移量:表示消息在 CommitLog 文件中的起始位置。
- 消息大小:表示消息的长度。
- 消息标签哈希值:用于快速过滤消息。
提示
ConsumeQueue 文件的大小也是固定的,默认情况下为 30W 条记录。当文件写满后,RocketMQ 会创建一个新的 ConsumeQueue 文件。