一、消息存储架构图

消息存储架构图

二、消息存储

2.1 消息存储文件

文件名称 作用 文件大小 文件格式 说明
CommitLog 消息主体以及元数据的存储主体 单个文件大小默认1G 消息顺序写入文件,当文件满了,写入下一个文件 文件名为20位,如一个文件名为00000000000000000000代表以一个文件,起始偏移量为0,文件大小为1G=1073741824,后面新增文件的名称基于上一个文件名累加1G,起始偏移量从上一个文件继续累计。
ConsumeQueue 消息消费队列 每个条目20个字节,单个文件由30W个条目组成 每一个条目共20个字节,分别为8字节的commitlog物理偏移量、4字节的消息长度、8字节tag hashcode 单个文件由30W个条目组成,可以像数组一样随机访问每一个条目,每个ConsumeQueue文件大小约5.72M
IndexFile 索引文件 固定的单个IndexFile文件大小约为400M,一个IndexFile可以保存 2000W个索引 IndexFile的底层存储设计为在文件系统中实现HashMap结构 rocketmq的索引文件其底层实现为hash索引

2.2 存储结构分析

  1. Broker单个实例下所有的队列共用一个日志数据文件(即为CommitLog)来存储。
  2. 多个Topic的消息实体内容都存储于一个CommitLog中
  3. RocketMQ的混合型存储结构针对Producer和Consumer分别采用了数据和索引部分相分离的存储结构