浅谈专有云MQ存储空间的清理机制

简介: 浅谈专有云MQ存储空间的清理机制

 

在近⼀年的项⽬保障过程中,对专有云MQ产品的存储⽔位清理模式⼀直存疑,总想一探究竟但又苦于工作繁忙、精力有限,直到最近⼀次项⽬保障过程中再次出现了类似的问题,⼤家对MQ Broker的⽔位清理机制仍然⽐较模糊,于是便有了这篇⽂章。希望能通过这篇⽂章将MQ Broker的消息清理机制讲清楚。
⾸先,我们先来看⼀张MQ的消息保存时间和Broker磁盘存储空间的⽔位趋势图(该图来源于铜雀,⽬前已更名为SRE技术保障平台)。通过该趋势图,可以看到红线左侧的消息保存时间(上⽅蓝⾊趋势线)和Broker磁盘存储空间(下⽅绿⾊区域)呈现出规律性的波动。⽽红线右侧部分,随着消息量的快速增加(通过Broker磁盘存储空间快速上涨得出),开始⼀段时间消息保存时间还呈规律性波动,但接近最右侧时,可以看到消息保存时间的波动频率加快了,⽽且消息保存时间快速下降。那么MQ对消息的清理机制到底是什么呢?

图1:消息保存时间&磁盘空间占比趋势图

在介绍清理机制前,先来复习⼀下MQ的消息是如何进⾏存储的。

图2:commitlog

Producer发送的所有消息都存放在Broker节点的
/home/admin/store/commitlog ⽬录下(专有云场景),每个commitlog的⼤⼩固定为1G。随着时间的推移,当Broker接收的消息量越来越多时,就会在该⽬录下⽣成多个⼤⼩为1G的commitlog⽂件。
ps: 特别声明,虽然该⽬录叫commitlog,但⽬录中存储的⽂件并不是程序⽇志,⽽是MQ Broker⽤来存储消息的⽂件载体,在MQ产品中这种⽂件载体叫做commitlog。之所以这⾥做特别说明,是因为历史上出现过由于误认为此⽬录下存储的是程序⽇志,为了释放磁盘存储空间将⽬录下的commitlog删除导致MQ消息丢失的故障。这是⾎的教训!这个⽬录下的⽂件不要碰,不要碰,不要碰。
commitlog⽬录下的⽂件让MQ⾃行维护清理便可。那MQ⾃身是根据什么规则来进⾏清理的呢?先来看⼀下MQ⾥⾯⼏个⽐较关键的阈值:

  • 72⼩时,MQ默认的消息保存时间。从图1可以看出每次消息保存时间波动下降时,均会逼近到该值。
  • 凌晨4点,MQ默认的消息清理触发时间。从图1可以看出每次消息保存时间下降均在凌晨4点发生。
  • 75%,MQ默认的开始触发清理磁盘存储空间的阈值。
  • 85%,MQ内置的开始强制清理磁盘存储空间的阈值。
  • 90%,MQ内置的Broker开始禁写的磁盘存储空间的阈值。

MQ会在两个时机对commitlog进⾏清理,⼀是前文提到的每天凌晨4点;另⼀个是消息写⼊时。通过以下表格可以更加清楚的看出具体的清理策略。

 

 

清理模式

  • 普通清理,这种清理模式只将72⼩时之前的commitlog清理掉,MQ在保证存储72⼩时消息的前提下,尽量降低磁盘空间使⽤率。
  • 强制清理,这种清理模式只在Broker存储空间⾼于85%的情况下触发,此时MQ在对commitlog进⾏清理时,将不再考虑72⼩时的消息保留时间,⽽是要尽可能保证能够接收新的MQ消息进来,因此会强制对 commitlog进⾏清理(因为如果不清理,磁盘空间使⽤率进⼀步上涨到90%后,Broker便会⾃动禁写,新的消息便⽆法写入)。当然也不会⼀次性将所有的commitlog清理掉,⽽是只批量清理⼀部分(代码中设置⼀个broker⼀次最多清理10个commitlog⽂件)。

我们回过头来再看⼀下这个趋势图。

图3:消息保存时间&磁盘空间占比趋势图

  • 图中1,2,3,4,5,6 处,Broker的存储空间均未超过75%,在每⽇凌晨4点触发了定时清理,将72⼩时之前的消息清理掉。可以看到在清理完成后,消息的保存时间都回落到了72⼩时左右。
  • 图中7处,Broker的存储空间使⽤率第⼀次达到了75%,但低于85%,触发了消息写⼊时的普通清理,此时清理的还是72⼩时之前的消息,可以看到消息保存时间在清理完成后回落到72⼩时左右,但存储空间使⽤率下降的⾮常⼩,说明⽬前Broker中存储的消息⼤部分都是72⼩时以内产⽣的。
  • 图中8处,随着消息的发送(消息写⼊速度⽐较快),存储空间使⽤率第⼆次达到了75%,仍低于85%,此时普通清理仍然是清理72⼩时之前的消息数据,可以看到磁盘空间使⽤率并没有明显下降。说明此时消息的写⼊速度已经⾼于commitlog的清理速度。
  • 8之后发⽣的事情,由于此时消息写⼊速度⾼于commitlog清理速度,虽然消息写⼊时会触发清理动作,但此时Broker中的消息都是72⼩时以内发送的,没有清理掉任何commitlog,磁盘⽔位并没有降低。随着消息的不断写⼊,Broker的存储⽔位不断升⾼,消息的保存时间基本维持不变。
  • 8之后的之后,当Broker的存储⽔位达到85%,此时Broker为了后续还能继续提供服务,会开启强制清理,此时MQ不再考虑72⼩时的消息保留时间,⽽是优先保证后续消息的顺利写⼊,于是会将72⼩时以内的消息也进⾏清理。整体表现为Broker的存储⽔位达到85%时,基本不会上涨(只有在消息写⼊量特别⼤时,消息写⼊速度远远⼤于commitlog清理速度,才会继续上涨),但由于清理了72⼩时以内的消息,会使Broker的消息保存时间开始降低,开始低于72⼩时,并随着后续清理动作不断降低。
  • 如上所述,消息写⼊量特别⼤,消息写⼊速度远⾼于commitlog的清理速度,Broker的存储⽔位在达到85%后还会继续升⾼,直至达到90%时,Broker为了保护⾃身服务可⽤性,会⾃动开启禁写,此时发送到该Broker的消息会被拒绝掉。Broker的存储⽔位不会进⼀步上升,⽽且此时Broker会开启强制清理,对72⼩时以内的消息进⾏清理,以便使Broker的存储⽔位降到90%以下,使Broker可以重新对外提供服务。

ps:实际在MQ的代码实现层⾯,为了保证消息写⼊Broker的性能,并不是每次写⼊消息时都进⾏存储
空间检查和commitlog清理,⽽是通过定时任务来执⾏(该定时任务每10s执⾏⼀次)。

上述介绍的⼏个清理阈值中,有些是可调的,有些是内置在代码中不可调的。⽐如“凌晨4点”,“72⼩时”,“75%”,这3个参数是⽤户可以调整的MQ配置,“85%”,“90%”是写死在代码中的,是⽆法调整的。
查看Broker配置信息的⽅式如下,在Broker的docker中执⾏

sh /home/admin/rmq/bin/mqadmin getBrokerConfig -b ${IP}:10911
  • deleteWhen,对应“凌晨4点”
  • fileReservedTime,对应“72⼩时”
  • diskMaxUsedSpaceRatio,对应“75%”

在调整配置时,deleteWhen通常选在客户MQ业务的低峰期进⾏,尽量避免commitlog清理对⽣产业务的影响。当Broker存储⽔位出现快速上涨时,为避免存储⽔位达到90%,出现禁写影响⽣产业务的情况,需要同时调整fileReservedTime和diskMaxUsedSpaceRatio的默认设置,通过调整这两个参数共同作⽤保证Broker的存储空间可以及时得到清理(还有⼀种降⽔位的⽅式——关闭MQ消息轨迹)。当然这所有参数的调整都需要经过与产研的沟通与确认。

以上就是对MQ Broker消息清理机制的剖析,希望通过这篇⽂章能够让大家理解并掌握其清理机制,能够处理实际工作中遇到的MQ Broker存储⽔位快速上涨的问题。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。

作者:刘维

原文链接

本文为阿里云原创内容,未经允许不得转载

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

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

相关文章

气象气候应用在Intel最新处理器Icelake上的性能测评

浪潮HPC实验室 一、Intel第三代至强可扩展处理器(Icelake)性能大升级 Intel于今年发布了第三代至强可扩展处理器系列产品(代号Ice Lake),与上一代至强可扩展处理器系列产品(代号Cascade Lake)相比,第三代…

评审恩仇录——我为什么愿意执行代码评审

简介: 代码评审带来的好处不言自明, 但企业业务快速发展的诉求与代码评审推动落地两者之间, 往往存在矛盾。在如今快速发展的互联网时代,数字化、智能化已经是基础能力,单纯只靠人肉审查的时代已经过去了,基于各种自动化检查能力的…

AI+混合云模式,如何最大化挖掘数据价值?

9月8日,IBM举行了“科技一席谈”线上媒体访谈会,此次访谈以“数据与AI”为主题,由IBM 大中华区科技事业部、客户成功管理部总经理朱辉,IBM 中国混合云与 AI 华东及华南大区总经理许伟杰作主题分享。 在数字化转型的时代&#xff…

阿里云贾扬清:大数据和人工智能一体化是必然趋势

简介: 拥抱“融合”是大数据演进的新方向,⼤数据⼈⼯智能⼀体化是⼤数据发展的必然⽅向,而人工智能是⼤数据业务发展的终极出⼝ 。 12月13日,阿里云计算平台负责人贾扬清在Flink Forward Asia 2020 峰会上指出,拥抱“融…

云效安全那些事儿—访问控制与数据安全

简介: 云效 Codeup 提供了代码 GPG 签名,拒绝未签名的提交;支持代码属主验证,约束提交记录属主。 在质量管控上,云效 Codeup 精细化读写权限管控,支持代码提交卡点机制,保障提交质量。 接下来我…

深信服何朝曦:托管云为用户上云提供第三种选择

9月17日,以“万物皆可云”为主题的信服云创新峰会成功举办。会上,深信服科技股份有限公司CEO何朝曦分享了运用云计算技术帮助用户进行数字化转型的观点。他认为兼具公有云和私有云优势的托管云,可以帮助非科技型企业和中小企业获得“数字化平…

java 使用c .dll_Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll

1.eclipse下建立一个HelloJNI.java内容如下:package JNI;public class HelloJNI{static{System.out.println("开始");System.loadLibrary("goodluck");System.out.println("结束");}public native static int get();public native st…

阿里云助力江苏省财政厅力推统一公共支付平台

简介: 为深化“放管服”改革,贯彻“互联网政务服务”要求,江苏省财政厅加快推进江苏省统一公共支付平台建设,实现全省政府非税收入、政务服务在线收缴和财政电子票据的集中统一处理,不仅节约了因“重复建设”产生的财政…

Midway Serverless 发布 2.0,一体化让前端研发再次提效

简介: 2021 年 3 月,Midway Serverless 推出了第二个大版本。就像两年前说的一样,开源只是开始,终态远没有到来。Midway 体系希望能够在当前的十字路口,不断向前演进,让前端可以去发展,朝着应用…

binaryviewer java_用java实现java的2进制文件字节序转换到C/C++的2进制文件字节序

展开全部package admit.action;/*用JAVA读取各种计算机文件系统的文件列表 当你安装了jdk,在32313133353236313431303231363533e78988e69d8331333332613732jdk的类库里,有一个标准的File类,通过该类,可以很方便的实现浏览各种文件…

ZDNS宣布完成B轮融资,根服务器之外,顶级域名系统迎重要机遇

从互联网诞生,由于IPv4技术中UDP报文数据容量限制,到2021的今天,全球也仅有13个根服务器(俗称“主根”),其中10个主根由美国持有,英国、瑞典、日本各持有1个。而中国只运营根镜像服务器。虽然目…

应用容灾中,MySQL数据表是否需要跨云同步?

简介: 容灾系统的重要目标在于保证系统数据和服务的“连续性”。当系统发生故障时,容灾系统能够快速恢复服务和保证数据的有效性。为了防止天灾人祸、不可抗力,在同城或异地建立对应的IT系统,其中最核心的工作是数据同步。本文选取…

java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...

整数的表示和运算我们已经讲完了,在实际应用中,整数能够解决我们大部分问题。但是某些需要精确表示的数,比如某件商品的价格,某两地之间的距离等等,我们如果用整数表示将会有很大的出入,这时候浮点数就产生…

Docker 终失 C 位,开源少年缘何黑化

作者 | 马超出品 | CSDN(ID:CSDNnews)开源真是火了,近些年成功的IT项目像TensorFlow、RocketMQ、TDEngine都是开源项目,而且这种火爆还出了圈,连带着RISC-V这种准开源的芯片也成为了各方争抢的香饽饽。但是…

中油即时通信电脑版_市场营销之即时通讯营销

✎IM营销又叫即时通讯营销(instantmessaging),是企业通过即时工具im推广产品和品牌,以实现目标客户挖掘和转化的网络营销方式。封面设计丨Sweety 责编丨花花第60篇丨每日一篇好文:2645字丨5分钟阅读即时通讯营销常用的主要有以下两种情况:第一…

java组合框的事件有哪些_博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理...

博为峰小博老师:在JList类中有addListSelectionListener()方法,可以检测用户是否对JList的选取有任何的改变。在ListSelectionListener接口中只定义一个方法,那就是valueChanged(ListSelectionEvente),所以必须实现这个方法&#…

使用 Arthas 排查 SpringBoot 诡异耗时的 Bug

简介: 公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。最近,在优化接口的响应时间,优化了代码之后,但是时间…

关于数据库,你可能最想知道的几件事

【CSDN 编者按】随着技术不断更新,数据库的发展可谓全面开花,也吸引了越来越多人的关注,但大家真的都足够了解数据库吗?作者 | 易璜珵 责编 | 侯淼淼出品 | 《新程序员》互联网飞速发展的时代里,数据库、中间件和…

java反编译工具_JDA Java反编译工具的下载和使用手册

JDA(javadecompile analysis)是一款以dex为核心的java反编译工具,同时支持apk、dex、jar文件的反编译,支持动态重命名。该软件主要是用来反编译分析代码而不是反编译出来完全正确的java代码,运行需安装jdk1.8及以上版本版本(jdk1.7应该也行)。…

OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器

简介: OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目。它来自阿里巴巴多年来容器化、云原生的技术沉淀,是阿里内部生产环境大规模应用的基于 Kubernetes 之…