概述

这篇博文主要是想讲清楚rocketMq中commitLog的存储格式和存储过程的,在整理文章的过程中发现有篇来自CSDN的文章的有一张图片画的非常完整,就套用过来了,不过在博文的末尾把参考文章的地址列出来了。

commitLog存储数据格式

commtLog的存储其实是分多层的,commitLog -> mappedFileQueue -> mappedFile,其中真正存储数据的是mappedFile。

commitLog在mappedFile当中存储消息的格式是【msg + msg + msg + ......+msg+blank】。也就是当最后的位置放不下消息的时候就填充空白。

rocketMq数据存储图

commitLog数据存储过程

commitLog内部的数据结构,核心的在于MappedFileQueue这个对象,以及每个MappedFile的大小(1G=20124*1024*1024)。

commitLog保存消息的过程如下

1、在mappedFileQueue里面选择最近的mappedFile文件,如果没有mappedFile文件或者mappedFile数据已经满的情况下就新建一个mappedFile文件。

2、选择mappedFile文件之后,开始计算消息体大小并保存至mappedFile文件当中,在整个保存过程中先用临时的byteBuffer(msgStoreItemMemory)保存,如果mappedFile文件能够保存下最新的消息体就保存消息至mappedFile文件,否则就保存一个结束符。

commitLog的数据结构

mappedFile的大小

获取MappedFile对象

获取writeBuffer并开始写入

前置计算消息大小等操作

存在消息体的过程

mappedFile文件生成逻辑

mappedFile的文件生成其实有一定的规则,首先mappedFile文件的命名是以1024*1024*1024=1073741824进行递增,也就是说第一个文件名字为000000001073741824,第二个名字是以00000000002147483648进行命令,以次递增。体现在代码中就是以上一个文件的便宜量加上1073741824即可。

在创建过程如果文件不存在我们就创建新文件,这里的创建也分两种类型,一种就是同时创建两个mappedFile文件,这个创建过程是异步的,在allocateMappedFileService内部其实有个线程在不停run执行文件创建过程;一种是同步创建文件过程。

在内部还涉及一些预热之类的逻辑,暂时没仔细看。

参考

RocketMQ消息存储流程图及数据结构图

rocketMq - commitLog相关推荐

  1. RocketMQ CommitLog And Index

    2019独角兽企业重金招聘Python工程师标准>>> 1. Commit Log 2. Index 2.1. IndexHeader // IndexHeader.javapubl ...

  2. RocketMQ简介

    RocketMQ作为一款纯java.分布式.队列模型的开源消息中间件,支持事务消息.顺序消息.批量消息.定时消息.消息回溯等. RocketMQ优点 1 RocketMQ去除对zk的依赖 2 Rock ...

  3. rocketmq集群安装部署过程(4.0.0版本)、安装中的常见问题举例

    本篇博文参考:http://www.cnblogs.com/quchunhui/p/7126868.html,然后按照自己的环境进行重新编写 准备工作: 下载rocketmq-all-4.0.0-in ...

  4. RocketMQ集群部署

    RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲解一哈RocketMQ是如 ...

  5. RocektMQ 消息存储机制原理

    RocektMQ 消息存储机制 RocketMQ 作为一款优秀的分布式消息中间件,可以为业务方提供高性能低延迟的稳定可靠的消息服务.其核心优势是可靠的消费存储.消息发送的高性能和低延迟.强大的消息堆积 ...

  6. RocketMQ源码分析(十二)之CommitLog同步与异步刷盘

    文章目录 版本 简介 FlushCommitLogService 同步刷盘 GroupCommitService 异步刷盘 CommitRealTimeService FlushRealTimeSer ...

  7. RocketMQ给broker发送消息确定Commitlog的写入的位置

    问题 有一个疑问,当client给broker发送消息的时候,怎么知道在commitlog的第几个字节开始写呢? 文件格式概述 commitlog消息单元存储结构 commitlog中存储的是客户端发 ...

  8. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/qu ...

  9. 深入剖析 RocketMQ 源码 - 消息存储模块

    作者:vivo互联网服务器团队-Zhang Zhenglin 一.简介 RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布.顺序消息.事务消息.定时消息 ...

最新文章

  1. 148. Sort List
  2. 【Python学习系列二十四】scikit-learn库逻辑回归实现唯品会用户购买行为预测
  3. 机房冷热通道系统整体解决方案
  4. 用zookeeper来实现分布式锁
  5. JAVA泛型--待续
  6. 11张图步步演进:你一定能看懂的【分布式系统】容错架构设计!
  7. Elasticsearch 技术分析(七): Elasticsearch 的性能优化
  8. ubuntu gnome vnc
  9. 文本整理器 v3.0 官方
  10. 电脑需要u盘启动的解决办法--蓝屏修复
  11. python元组元素的提取_Python 元组
  12. 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
  13. 机房动力环境监测系统
  14. 看表空间大小,查询表空间名的表空间文件存放位置,矿展表空间,查看表空间名称...
  15. Excel 按照某一列不同内容插入分页符号
  16. 西数硬盘砍头流程说明
  17. 关于java学习的一些东西
  18. 红帽云邮:外贸邮件营销
  19. 0xCCCCCCCCC的内存不能访问的原因
  20. 小程序毕业设计 基于微信菜谱小程序毕业设计开题报告参考

热门文章

  1. golan web扫雷
  2. 帮人搬,上海的房子貌似不贵
  3. Ada 程序设计语言(The Ada Programming Language)[第二集]
  4. 【转载】在Linux CentOS中安装VSCode用于C++学习,亲测可用
  5. python进阶:JSON与枚举
  6. 剑指offer 算法 (综合)
  7. Redis实现之数据库(三)
  8. centos 7 忘记密码
  9. 点击切换图标方法,jquery bootstrap方法
  10. 元素,布局方式,BFC和清除浮动