RocketMQ消息存储
一、消息存储架构图
二、消息存储
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 存储结构分析
- Broker单个实例下所有的队列共用一个日志数据文件(即为CommitLog)来存储。
- 多个Topic的消息实体内容都存储于一个CommitLog中
- RocketMQ的混合型存储结构针对Producer和Consumer分别采用了数据和索引部分相分离的存储结构
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逐光の博客!
评论