RocketMQ —消息存储和清理机制

news2024/11/23 6:25:26

本文为您介绍 Apache RocketMQ 中消息的存储机制,包括消息的存储粒度、判断依据及后续处理策略等。

背景信息​

参考 Apache RocketMQ 中队列的定义,消息按照达到服务器的先后顺序被存储到队列中,理论上每个队列都支持无限存储。

但是在实际部署场景中,服务端节点的物理存储空间有限,消息无法做到永久存储。因此,在实际使用中需要考虑以下问题,消息在服务端中的存储以什么维度为判定条件?消息存储以什么粒度进行管理?消息存储超过限制后如何处理?这些问题都是由消息存储和过期清理机制来定义的。

了解消息存储和过期清理机制,可以从以下方面帮助您更好的进行运维管理:

  • 提供消息存储时间SLA,为业务提供安全冗余空间:消息存储时间的承诺本质上代表业务侧可以自由获取消息的时间范围。对于消费时间长、消息堆积、故障恢复等场景非常关键。

  • 评估和控制存储成本:Apache RocketMQ 消息一般存储于磁盘介质上,您可以通过存储机制评估消息存储空间,提前预留存储资源。

消息存储机制​

原理机制

Apache RocketMQ 使用存储时长作为消息存储的依据,即每个节点对外承诺消息的存储时长。在存储时长范围内的消息都会被保留,无论消息是否被消费;超过时长限制的消息则会被清理掉。

消息存储机制主要定义以下关键问题:

  • 消息存储管理粒度:Apache RocketMQ 按存储节点管理消息的存储时长,并不是按照主题或队列粒度来管理。

  • 消息存储判断依据:消息存储按照存储时间作为判断依据,相对于消息数量、消息大小等条件,使用存储时间作为判断依据,更利于业务方对消息数据的价值进行评估。

  • 消息存储和是否消费状态无关:Apache RocketMQ 的消息存储是按照消息的生产时间计算,和消息是否被消费无关。按照统一的计算策略可以有效地简化存储机制。

消息在队列中的存储情况如下:

消息存储

备注

消息存储管理粒度说明

Apache RocketMQ 按照服务端节点粒度管理存储时长而非队列或主题,原因如下:

  • 消息存储优势权衡:Apache RocketMQ 基于统一的物理日志队列和轻量化逻辑队列的二级组织方式,管理物理数据。这种机制可以带来顺序读写、高吞吐、高性能等优势,但缺点是不支持按主题和队列单独管理。

  • 安全生产和容量保障风险要求:即使Apache RocketMQ 按照主题或者队列独立生成存储文件,但存储层本质还是共享存储介质。单独根据主题或队列控制存储时长,这种方式看似更灵活,但实际上整个集群仍然存在容量风险,可能会导致存储时长SLA被打破。从安全生产角度考虑,最合理的方式是将不同存储时长的消息通过不同集群进行分离治理。

消息存储和消费状态关系说明

Apache RocketMQ 统一管理消息的存储时长,无论消息是否被消费。

当消费者不在线或消息消费异常时,会造成队列中大量消息堆积,且该现象暂时无法有效控制。若此时按照消费状态考虑将未消费的消息全部保留,则很容易导致存储空间不足,进而影响到新消息的读写速度。

根据统一地存储时长管理消息,可以帮助消费者业务清晰地判断每条消息的生命周期。只要消息在有效期内可以随时被消费,或通过重置消费位点功能使消息可被消费多次。

消息存储文件结构说明 Apache RocketMQ 消息默认存储在本地磁盘文件中,存储文件的根目录由配置参数 storePathRootDir 决定,存储结构如下图所示,其中 commitlog 文件夹存储消息物理文件,consumeCQueue文件夹存储逻辑队列索引,其他文件的详细作用可以参考代码解析。 

消息存储

消息过期清理机制​

在 Apache RocketMQ中,消息保存时长并不能完整控制消息的实际保存时间,因为消息存储仍然使用本地磁盘,本地磁盘空间不足时,为保证服务稳定性消息仍然会被强制清理,导致消息的实际保存时长小于设置的保存时长。

使用建议​

消息存储时长建议适当增加

Apache RocketMQ 按存储时长统一控制消息是否保留。建议在存储成本可控的前提下,尽可能延长消息存储时长。延长消息存储时长,可以为紧急故障恢复、应急问题排查和消息回溯带来更多的可操作空间。

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

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

相关文章

87、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->List相关命令

本次讲解要点: List相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe redi…

电压信号拉线位移编码器有何突出的特点

电压信号拉线位移编码器有何突出的特点 电压信号拉线位移编码器原理简单,外观工艺做工精细,由铝合金精心打造、坚固耐磨;适合空间较小的环境安装。该产品重复精度达到0.01%;工作电压上可选择5V或5-24V供电,保护功能上具…

博客摘录「 MPLS/LDP原理介绍+报文分析+配置示例」2023年9月26日

//首先发送UDP Hello组播包进行发现;随后TCP三次握手开始建立Session,Active端和Passive端互相初始化和Keepalive保活确认;完成之后可开始进行标签交互。 //首先发送UDP Hello组播包进行发现;随后TCP三次握手开始建立Session&…

2023-9-26 JZ23 链表中环的入口结点

题目链接:链表中环的入口结点 import java.util.*; /*public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} } */ public class Solution {public ListNode EntryNodeOfLoop(ListNode head) {if(head null || head.next null …

MTK6765/MT6765联发科4G安卓核心板安兔兔跑分

Mediatek Helio P35 MTK6765是智能手机的主流ARM SoC。它在两个集群中集成了8个ARM Cortex-A53内核(big.LITTLE)。四个性能内核的频率高达2.3 GHz。 集成显卡为PowerVR GE8320,频率高达680 MHz。 集成内存控制器支持1500 MHz或933 MHz LPDDR3的LPDDR4x。 MT6765处理…

澜渟:长期主义才能成就专研企业

企业的增长模式有三种:第一种是全局增长,即“水大鱼大”式的、更多依靠外界环境的增长;第二种是结构性增长,即找准赛道,随着产业、行业的增长而增长;第三种是内生性增长,即通过内部创新实现增长…

tp6 + swagger 配置文档接口

ThinkPHP 6.0 运行环境要求PHP7.2,兼容PHP8.1 安装 composer create-project topthink/think tp 6.0.*如果需要更新框架使用 composer update topthink/framework文档 完全开发手册 swagger 文档 注解文档 安装包 composer require zircote/swagger-php 引用…

迅为龙芯3A5000_7A2000运行国产Loongnix、银河麒麟、统信UOS以及实时系统翼辉SylixoS系统

iTOP-3A5000开发板采用全国产龙芯3A500处理器,基于龙芯自主指令系统 (LoongArch)的LA464微结构,并进一步提升频率,降低功耗,优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上,频率提升至2.5GHZ,功耗降低…

Vue+Three.js实现三维管道可视化及流动模拟续集

继上一篇文章中实现了三维管道的可视化和流动模拟,经过反馈,对大家还是有一定帮助,因此就编写了一个续集,相当于增加了一些常见的通用共性功能,主要在前面的基础上增加了以下功能:1.新增直角拐弯的管道,工业中很多管道都是横平竖直的,相当于我们装修的水管或电线等,不…

龙芯2K1000核心板在智能座舱行业产品方案-迅为电子

迅为2K1000核心板是一款高性能的处理器,适用于智能座舱行业。它具备多核CPU、高级图像处理和丰富的接口选项,可用于开发先进的智能座舱解决方案,提高乘坐体验、安全性和便捷性。以下是2K1000处理器在智能座舱行业中的产品方案。 高清晰度显…

跨网传输文件时,如何通过日志记录来审计追溯?

跨网文件传输也就是内外网文件传输,一直是企业最基本的传输需求,无论是内部的业务数据、技术文档、合同报告,还是外部的客户资料、合作方案、市场分析,都需要通过不同的网络进行安全高效的传输。然而,跨网传输文件也存…

curl 接口调用工具

后端接口开发完成,你还在为等待前端而无法调试吗? 今天分享一个小工具,curl,一个命令行文件传输工具。可用于大家平常开发的接口调用测试。 它支持文件的上传和下载,支持包括HTTP、HTTPS、ftp等众多协议,…

vue3+eleement plus日历选择季度

<template><div class"el-quarter-wrap"><el-popover width"280" v-model"visible"><template #reference><el-input v-model"quarterDate" placeholder"请选择季度" clearable :prefix-icon&qu…

【Vue.js】使用ElementUI搭建动态树数据表格与分页

一&#xff0c;动态树 本文章为上一篇文章拓展内容》》实现首页导航及左侧菜单 将左侧菜单结构更换为下面代码&#xff1a; 菜单结构&#xff1a; <el-menu><el-submenu index"" key""><template slot"title"><i class…

EOCR-I3M420/I3M420电动机保护器4-20mA输出的设置方法

此文章由上海韩施电气自动化设备有限公司提供 EOCR-I3M420/IFM420是施耐德韩国公司生产的一款具备4-20mA电流输出功能的电动机保护器&#xff0c;它同时还具备过载、欠载、堵转、失速、逆相、缺相和三相不平衡等电流保护功能&#xff0c;以其测量精度高、功能全面、占用空间小…

获得1688商品详情(关键词搜索,店铺所有商品)API接口返回值说明

1688API接口&#xff0c;简单而言&#xff0c;就是一套工具&#xff0c;可以帮助你与1688平台的数据与功能进行智能对接。它能够让你的店铺信息、商品信息、用户数据等信息实现高效流通&#xff0c;帮助你更好地理解客户需求 我们深知数据安全的重要性&#xff0c;因此&#x…

4项简化IT服务台任务的ChatGPT功能

近几个月&#xff0c;随着人工智能聊天机器人 ChatGPT 风靡全球&#xff0c;用户可以通过它生成脚本、文章、运动计划表等。同时&#xff0c;这项技术在各行各业都能够进行无穷无尽的应用&#xff0c;在本文中&#xff0c;我们将探讨这项现代技术如何帮助ITSM团队提升服务交付和…

Spring cloud gateway整合sentinel实现熔断

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 线上的网关可能会存在单个服务因为大量异常接口导致整个网关或者业务系统被打爆&#xff0c;所以为了系统的可用性&#xff0c;我们会选择对网关和服务进行…

用电监测环保用电系统云平台解决方案-安科瑞黄安南

背景 2018年6月24日公布的《中共中央国务院关于全面加强生态环境保护坚决打好污染防治攻坚战的意见》提出&#xff1a; 坚决打赢蓝天保卫战&#xff0c;着力打好碧水保卫战&#xff0c;扎实推进净土保卫战。 到2020年三大保卫战具体指标&#xff1a;全国PM2.5未达标地级及以…

Spring面试题19:说一说Spring注解?什么是基于Java的Spring注解配置?什么是基于注解的容器配置?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring注解 Spring注解是一种在Spring框架中使用的特殊标记,用于在应用程序中声明特定的配置、行为或功能。注解可以应用于类、方法、字段…