RocketMQ学习笔记:消息存储模型,持久化文件,过期文件删除

这是本人学习的总结,主要学习资料如下

  • 马士兵教育
  • rocketMq官方文档

目录

  • 1、消息存储结构
    • 1.1、CommitLog详解
      • 1.1.1、CommitLog存储的优点
    • 1.2、ConsumeQueue详解
    • 1.3、Index详解
  • 2、持久化文件
  • 3、过期文件删除机制
    • 3.1、判断过期文件
    • 3.2、删除的时机


1、消息存储结构

消息在消息队列中的存储结构如下所示。这三个模块都是文件。默认放在${user.home}/store之下。

  • 首先是左边的CommitLog,不管是什么topic,所有的消息都是放到这个集合之中。存储着消息的topicmessage等消息的元数据。
  • 右上角的是Comsummequeue,是逻辑消息队列,代表着一个topic底下的一个queue。里面顺序存放着属于这个queue的所有消息。不过这是存放消息的地址和偏移量,消息的其他信息还需要到CommitLog中读取。
  • Index则是记录着所有消息的索引。RocketMQ提供通过idKey来快速查询到一个msg。因为id是由brokerId+offset构成的,所以自然能从commitLog中读取消息。Index中则记录keyoffset的映射,所以可以通过key快速找到一个msg

1.1、CommitLog详解

CommitLog采访者消息的所有元信息。每个CommitLog都被本机上的所有queue共享,与消息的topic等无关。

消息的存储结构和Redis的压缩列表类似。每个消息的前面存放一些元数据,后面放消息的具体内容。这样每个消息的长度是不固定的。
请添加图片描述

每个CommitLog文件默认是1G。如果消息塞满了一个文件则会生成一个新的,并且令其初始偏移量在上一个文件的基础上加1073741824(1G = 1073741824byte)。

在写消息时,尽管有多个生产者会同时发送消息,但永远是一个一个地往CommitLog中写消息。

1.1.1、CommitLog存储的优点

  1. CommitLog 顺序写 ,可以大大提高写入效率。
    实际上,磁盘有时候会比你想象的快很多,有时候也比你想象的慢很多,关键在如何使用,使用得当,磁盘的速度完全可以匹配上网络的数据传输速度。目前的高性能磁盘,顺序写速度可以达到600MB/s ,超过了一般网卡的传输速度,这是磁盘比想象的快的地方 但是磁盘随机写的速度只有大概lOOKB/s,和顺序写的性能相差 6000 倍。
  2. 虽然是随机读,但是利用操作系统的 pagecache 机制,可以批量地从磁盘读取,作为 cache 存到内存中,加速后续的读取速度。
  3. 为了保证完全的顺序写,需要ConsumeQueue这个中间结构 ,因为ConsumeQueue 里只存偏移量信息,所以尺寸是有限的,在实际情况中,大部分的 ConsumeQueue能够被全部读入内存,所以这个中间结构的操作速度很快,可以认为是内存读取的速度。此外为了保证 CommitLogConsumeQueue的一致性, CommitLog 里存储了 Consume QueuesMessage KeyTag 等所有信息,即使 ConsumeQueue 丢失,也可以通过CommitLog 完全恢复出来。



1.2、ConsumeQueue详解

ComsumeQueue是一个逻辑队列,代表了一个topic下的一个queue。它里面只存储消息的索引,不存具体的信息,具体的消息信息要到CommitLog中寻找。

下面是具体存储结构。
在这里插入图片描述

1.3、Index详解

RocketMQ提供通过idKey来快速查询到一个msg。因为id是由brokerId+offset构成的,所以自然能从commitLog中读取消息。Index中则记录keyoffset的映射,所以可以通过key快速找到一个msg

2、持久化文件

RocketMQ的持久化文件默认会放到${user.home}/store目录下,也可以在broker.conf中配置storePathRootDir修改路径。

一般有下面这几个文件。
请添加图片描述

  • commitlog: 消息存储的元数据
  • config:运行期间的一些配置信息。
  • consumerqueue:消息消费对了存储目录。
  • index:消息索引文件存储目录。
  • abort:如果存在该文件则表示MQ是非正常关闭的。
  • checkPoint:文件检查点,存储着commitlogconsumerqueueindex文件最后一次刷盘时间戳。

3、过期文件删除机制

3.1、判断过期文件

RocketMQ的持久化文件不会永远存在,每隔一段时间就会清理掉一部分。主要是删除CommitLogConsumeQueue这两个文件。

RocketMQ中,一段时间内没更新的文件就被视为过期文件,不管里面的消息是不是全都被消费了。

默认是42小时没有更新就删除,默认时间根据版本的不同而不同,这个也是可以在broker.config中配置的,fileReserveTime

删除文件是由定时任务做的,默认10s扫描一次。

判断是否要删除过期文件的机制总共和下面这几个个参数有关

  • fileReserveTime:单位小时,超过这个时间没更新的文件就是过期文件。
  • destroyMapedFileIntervalForcibly:当清理线程准备删除一个文件时,如果这个文件还被其他线程引用,取消这次删除操作并记录当前时间。destroyMapedFileIntervalForcibly表示在一段时间内(单位是ms),会一直保留这个文件。超过这个时间以后,每次清理线程发现这个文件就会减少1000个对该文件的引用,直到引用数变成0,删除该文件。

3.2、删除的时机

默认是10秒一次扫描,但是有下面的特殊情况也会触发扫描。

  • deleteWhen:将扫描时间固定成一天当中的某个时刻执行一次,比如凌晨4点。
  • DiskSpaceCleanForciblyRatio:默认值85。表示磁盘空间使用率达到85%以后,就会立刻启动过期文件删除机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat15安装教程

直接开始Navicat15的安装教程 下载好上面的资源,解压后得到以下文件 1. 安装 Navicat ①双击 navicat150_premium_cs_x64.exe,准备安装 Navicat 15 ②无脑一直下一步就行,到下图画面就安装成功了。 2.安装完成以后,先不要启动…

第三十一天-Flask-ORM-sqlalchemy

目录 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 ​编辑 4.插入修改删除 5.查询 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 4.插入修改删除 5.查询

LangChain核心概念与组件

Chains Chains可以让你按照一定的顺序和逻辑来执行不同的任务。Chains有以下四种类型: 类型作用LLMChain用于在语言模型周围添加一些功能的简单Chain,它由一个PromptTemplate和一个语言模型(LLM或chat model)组成,它…

python(django)之单一接口管理功能后台开发

1、创建数据模型 在apitest/models.py下加入以下代码 class Apis(models.Model):Product models.ForeignKey(product.Product, on_deletemodels.CASCADE, nullTrue)# 关联产品IDapiname models.CharField(接口名称, max_length100)apiurl models.CharField(接口地址, max_…

住在我心里的猴子:焦虑那些事儿 - 三余书屋 3ysw.net

精读文稿 您好,本期我们解读的是《住在我心里的猴子》。这是一本由患有焦虑症的作家所著,关于焦虑症的书。不仅如此,作者的父母和哥哥也都有焦虑症,而作者的母亲后来还成为了治疗焦虑症的专家。这本书的中文版大约有11万字&#x…

深度学习模型部署(十二)CUDA编程-绪

CUDA 运行时 API 与 CUDA 驱动 API 速度没有差别,实际中使用运行时 API 较多,运行时 API 是在驱动 API 上的一层封装。​ CUDA 是什么?​ CUDA(Compute Unified Device Architecture) 是 nvidia 推出的一个通用并行技术架构,用它…

【蓝桥杯】填空题技巧|巧用编译器|用Python处理大数和字符|心算手数|思维题

目录 一、填空题 1.巧用编译器 2.巧用Excel 3. 用Python处理大数 4.用Python处理字符 5.心算手数 二、思维题 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 一、填空题 …

【考研数学】张宇全程学习包

可以全程张宇老师的高等数学,张宇老师的拿手绝活是高数 但是其他科目,还有更好的选择,比如线性代数,汤家凤老师还有李永乐老师讲的都不错,概率论,余丙森老师还有方浩老师讲的很好。下面我就讲清楚&#xf…

AI 视频 | 火爆全网的真人转动漫工具 DomoAI,又上新功能了!(三)

DomoAI 又又又上线新功能了! 上传一张静态人像图片 一个人像动作视频,就可以生成两者融合的动态视频。 啥都不说,直接看官方的示例视频: DomoAI 新功能 move 官方示例视频 使用非常简单,在 Discord 中通过 /move 指…

C++ 动态规划

文章目录 一、简介二、举个栗子2.1斐波那契数列2.2最短路径(DFS) 参考资料 一、简介 感觉动态规划非常的实用,因此这里整理一下相关资料。动态规划(Dynamic Programming):简称 DP,是一种优化算法…

【JavaEE初阶系列】——多线程案例一——单例模式 (“饿汉模式“和“懒汉模式“以及解决线程安全问题)

目录 🚩单例模式 🎈饿汉模式 🎈懒汉模式 ❗线程安全问题 📝加锁 📝执行效率提高 📝指令重排序 🍭总结 单例模式,非常经典的设计模式,也是一个重要的学科&#x…

摆扫式(whisk broom)和推扫式(push broom)卫星传感器介绍

目前,我们卫星传感器主要有两大类型:摆扫式(whisk broom)和推扫式(push broom)。为了更好的理解和使用卫星影像数据,我们需要简单了解下这两种传感器工作原理。 摆扫式:Whisk Broom…

搭建Hadoop HA

目录 前言 搭建前准备 搭建 前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,它允许用户在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop主要解决大数据存储和大数据分析两大核心问题&…

Phoenix概念篇

文章目录 前言Phoenix的web层概念PlugEndpointRouterScopePipeline ControllerAction Component 一次请求 前言 Elixir和Phoenix的作者也是Rails社区的核心开发者,如果是之前接触过Ruby on Rails的开发者,对Phoenix也许不会感到太陌生。笔者没有接触过R…

【报错】使用gradio渲染html页面无法加载本地图片

【报错】使用gradio渲染html页面无法加载本地图片 【报错】使用gradio渲染html页面无法加载本地图片[HTML] how to load local image by html output #884成功解决 【报错】使用gradio渲染html页面无法加载本地图片 在使用gradio框架渲染html页面,使用绝对路径&quo…

BUUCTF-Misc14

[WUSTCTF2020]find_me1 1.打开附件 是一个学校的校徽 2.盲文解密 发现图片属性里的备注是一串盲文 用在线盲文解密 3.得到flag

C语言笔记:重学输入和输出

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一,课程链接:ACM金牌带你零基础直达C语言精通https://www.bilibili.com/cheese/play/ep159068?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说…

AI新工具 视频迁移升级中国水墨画风格2.0;新颖的视频编辑框架提示编辑,风格转移,身份操控都不在话下;提取多种风格人脸草图

✨ 1: DomoAI 升级中国水墨画风格2.0 DomoAI是一个多功能的AI视频处理工具,可以将视频转换成多种风格,包括日本动漫、3D卡通、漫画和像素风格等。用户只需上传原始视频,通过简单的操作就能实现风格转换,制作出具有个性的高质量视…

“架构(Architecture)” 一词的定义演变历史(依据国际标准)

深入理解“架构”的客观含义,不仅能使IT行业的系统架构设计师提升思想境界,对每一个积极的社会行动者而言,也具有长远的现实意义,因为,“架构”一词,不只限于IT系统,而是指各类系统(包括社会系统…

蓝鹏智能测量仪应用于这些方面!助力发展新质生产力!

新质生产力是未来几年着重发展的方向,关于如何实现产业化升级,各厂家会在自身的基础上进行产业化调整升级,利用新工具、新手段,大幅缩短研发设计周期,从而让产品迭代速度不断加快;提升产品品质,…