rocketMq - commitLog

系列

rocketMq概念介绍

rocketMq-namesrv介绍

rocketMq-Topic创建过程

rocketMq-producer介绍

rocketMq-consumer介绍

rocketMq - rebalance介绍

rocketMq - 并发消费过程

rocketMq - 串行消费过程

rocketMq-broker介绍

rocketMq-broker消息存储介绍

rocketMq - commitLog

rocketMq - index介绍

rocketMq-延迟消息介绍

rocketMq-事务消息介绍

rocketMq消息查询

rocketMq和kafka的架构区别

rocketMq - master/slave同步


概述

    这篇博文主要是想讲清楚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消息存储流程图及数据结构图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,040评论 0 15
  • 分布式开放消息系统(RocketMQ)的原理与实践 来源:http://www.jianshu.com/p/453...
    meng_philip123阅读 13,135评论 6 104
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,271评论 4 16
  • 一边顾着她,一边开了门,扶她进了屋之后,易开心一下仰坐在沙发上,却是沉默了下来。欢颜给她换了鞋,斟了水喂她喝下后,...
    小黑白Jade阅读 481评论 0 2