RocketMQ就是采用文件系统的方式来存储消息,消息的存储是由ConsumeQueue和CommitLog配合完成的。CommitLog是消息真正的物理存储文件。ConsumeQueue是消息的逻辑队列,有点类似于数据库的索引文件,里面存储的是指向CommitLog文件中消息存储的地址。

每个Topic下的每个Message Queue都会对应一个ConsumeQueue文件,文件的地址是: ${store_home}/consumequeue/${topicNmae}/${queueId}/${filename}, 默认路径: /root/store 在rocketMQ的文件存储目录下,可以看到这样一个结构的的而文件。

我们只需要关心Commitlog、Consumequeue、Index

CommitLog

CommitLog是用来存放消息的物理文件,每个broker上的commitLog本当前机器上的所有consumerQueue共享,不做任何的区分。

CommitLog中的文件默认大小为1G,可以动态配置; 当一个文件写满以后,会生成一个新的commitlog文件。所有的Topic数据是顺序写入在CommitLog文件中的。

文件名的长度为20位,左边补0,剩余未起始偏移量,比如

00000000000000000000 表示第一个文件, 文件大小为102410241024,当第一个文件写满之后,生成第二个文件

000000000001073741824 表示第二个文件,起始偏移量为1073741824

ConsumeQueue

consumeQueue表示消息消费的逻辑队列,这里面包含MessageQueue在commitlog中的其实物理位置偏移量offset,消息实体内容的大小和Message Tag的hash值。对于实际物理存储来说, consumeQueue对应每个topic和queueid下的文件,每个consumeQueue类型的文件也是有大小,每个文件默认大小约为600W个字节,如果文件满了后会也会生成一个新的文件

IndexFile

索引文件,如果一个消息包含Key值的话,会使用IndexFile存储消息索引。Index索引文件提供了对CommitLog进行数据检索,提供了一种通过key或者时间区间来查找CommitLog中的消息的方法。在物理存储中,文件名是以创建的时间戳明明,固定的单个IndexFile大小大概为400M,一个IndexFile可以保存2000W个索引

abort

broker在启动的时候会创建一个空的名为abort的文件,并在shutdown时将其删除,用于标识进程是否正常退出,如果不正常退出,会在启动时做故障恢复

RocketMQ消息的存储结构相关推荐

  1. 【RocketMQ】消息的存储设计

    RocketMQ因为有高可靠性的要求(宕机不丢失数据),所以数据要进行持久化存储.所以RocketMQ采用文件进行存储. 物理文件结构 RocketMQ的数据默认存储在${user.home}/sto ...

  2. RocketMQ的存储之消息的存储分析

    RocketMQ存储 RocketMQ中的消息数据存储,采用了零拷贝技术(使用 mmap + write 方式),文件系统采用 Linux Ext4 文件系统进行存储. 消息数据的存储 在Rocket ...

  3. 从源码分析RocketMQ系列-RocketMQ消息持久化源码详解

    导语   在上篇分析中,提到了一个概念处理器,并且在进入到最终NettyIO的时候看到了一个Pair的对象,这个对象存储了两个对象,一个是执行器,一个是处理器,在进入Runable对象的时候看到封装到 ...

  4. rocketmq 消息指定_rocketmq-常见问题总结(消息的顺序、重复、消费模式)

    参考: http://www.cnblogs.com/wxd0108/p/6038543.html https://www.cnblogs.com/520playboy/p/6750023.html ...

  5. RocketMQ(七)RocketMQ消息生产及消息储存机制

    目录 1.消息生产 1.1 消息的生产过程 1.2 Queue选择算法 2.消息储存 2.1 存储介质 2.2 消息的存储和发送 2.3 消息存储结构 2.4 刷盘机制 1.消息生产 1.1 消息的生 ...

  6. 从源码分析RocketMQ系列-RocketMQ消息设计详解

    1 消息存储   消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构.PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三 ...

  7. rocketmq存储结构_RocketMQ消息存储

    存储架构 RMQ存储架构 上图即为RocketMQ的消息存储整体架构,RocketMQ采用的是混合型的存储结构,即为Broker单个实例下所有的队列共用一个日志数据文件(即为CommitLog,1G) ...

  8. rocketmq存储结构_阿里专家分享内部绝密RocketMQ核心原理与最佳实践笔记

    本文源码以RocketMQ 4.2.0 和 RocketMQ 4.3.0 为 基 础 , 从RocketMQ的实际使用到RocketMQ的源码分析,再到RocketMQ企业落地实践方案,逐步讲解.使读 ...

  9. RocketMQ是怎么存储消息的?

    文章目录 1. 存储消息的时机 2. 消息的磁盘读写速度如何保证? 3. 消息存储结构 4. 消息存储源码解析 5. 刷盘机制 6. 主从复制机制 1. 存储消息的时机 RocketMQ对消息的操作是 ...

最新文章

  1. shell 去掉字符串中的字母
  2. Paper:2020年3月30日何恺明团队最新算法RegNet—来自Facebook AI研究院《Designing Network Design Spaces》的翻译与解读
  3. Linux下如何避免误操作执行 rm
  4. C++学习——拷贝构造函数和移动构造函数
  5. in ms sql 集合参数传递_mybatis从入门到精通,第三篇《动态SQL》,干货满满
  6. 专题:区块链与数据共享(上)
  7. 如何使用strace+pstack利器分析程序性能
  8. python 中locals() 和 globals()
  9. python execfile_python中eval, exec, execfile,和compile [转载]
  10. python 插入排序,选择排序
  11. 内联函数 inline
  12. ELK Stack 日志平台性能优化实践
  13. 不负高端商务旗舰之名,金立M2017将搭载高通芯片
  14. 阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
  15. 哈希表:如何利用好高效率查找的“利器”?
  16. 计算机组成原理慕课第六章答案,计算机组成原理单元答案2020MOOC
  17. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
  18. 集合的简单实现(斗地主牌的实现 )
  19. 使用docker安装ubuntu镜像
  20. 全国淘宝村数量已超2100个 阿里巴巴打造乡村振兴新样本

热门文章

  1. (素材源代码) 猫猫学iOS 之UIDynamic重力、弹性碰撞吸附等现象牛逼Demo
  2. 贪心1--排队打水问题
  3. hdu1175-连连看(dfs)
  4. TabControl控件用法图解
  5. Coreseek-带中文分词的Sphinx
  6. dell c6220II lsi阵列卡
  7. URAL-1982 Electrification Plan 最小生成树
  8. 【Redis学习】Transaction事务管理
  9. 【干货集锦】如何轻松玩转文档管理工具?我们为你精心准备了一份学习大礼包...
  10. S3C2440 IIS操作 uda134x录放音