消息存储总结|学习笔记

简介: 快速学习消息存储总结

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)消息存储总结】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12491


消息存储总结


消息存储总结

RocketMQ 的存储文件包括消息文件(Commitlog)、消息消费队列文件(ConsumerQueue)、Hash索引文件(IndexFile)、监测点文件(checkPoint)、abort(关闭异常文件)。单个消息存储文件、消息消费队列文件、Hash索引文件以长度固定的方式进行创建,这样做的目的是以便使用内存映射机制进行文件的读写操作。

RocketMQ组织文件以文件的起始偏移量来命令文件,这样根据偏移量能快速定位到真实的物理文件。 RocketMQ 的数据写到内存文件之后,基于内存映射文件机制提供了同步刷盘和异步刷盘两种机制,异步刷盘是指在消息存储时先追加到内存映射文件,然后启动专门的刷盘线程定时将内存中的文件数据刷写到磁盘。

CommitLog 在消息存储文件当中是非常重要的一个文件,RocketMQ 为了保证消息发送的高吞吐量,所以采用单一文件存储所有主题消息,保证消息存储是完全的顺序写,但这样给文件读取带来了不便,为此 RocketMQ 为了方便消息消费构建了消息消费队列文件,基于主题与队列进行组织,同时RocketMQ为消息实现了Hash索引,可以为消息设置索引键,根据所以能够快速从 CommitLog 文件中检索消息。

当消息达到 CommitLog 后,会通过 ReputMessageService 线程接近实时地将消息转发给消息消费队列文件与索引文件。在数据分发的过程当中,如果出现了问题,它引入了消息队列、索引文件以及数据恢复的机制。在进行文件恢复的时候,又分为正常恢复和异常关闭两种形式。采用abort文件就能对两种形式进行区分。正常恢复是在倒数第三个 CommitLog 去进行恢复,而异常恢复是在倒数第一个 CommitLog 去进行恢复。为了安全起见, RocketMQ 引入abort文件,记录Broker的停机是否是正常关闭还是异常关闭,在重启Broker 时为了保证 CommitLog 文件,消息消费队列文件与 Hash 索引文件的正确性,分别采用不同策略来恢复文件。

RocketMQ 不会永久存储消息文件、消息消费队列文件,它们则会存在于过期的一个时间,过期时间则是在72小时,72小时则会被删除掉。其他的启动文件过期机制并在磁盘空间不足或者默认凌晨4点删除过期文件,文件保存72小时并且在删除文件时并不会判断该消息文件上的消息是否被消费。并且它也提供了一些人工的机制,采用这种方式就可以直接进行删除。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
存储 缓存 分布式计算
HBase入门指南
HBase是一个开源的非关系型分布式数据库,设计初衷是为了解决大量结构化数据存储与处理的需求
1435 0
HBase入门指南
|
2月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
消息中间件 中间件 Kafka
RocketMQ源码(二)消息消费的模式到底是Push还是Pull?
RocketMQ源码(二)消息消费的模式到底是Push还是Pull?
433 1
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
875 0
|
消息中间件 JSON 大数据
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
309 4
|
Web App开发 缓存 Ubuntu
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
964 11
|
Java
Thread 类中的start() 和 run() 方法有什么区别
【8月更文挑战第9天】Thread 类中的start() 和 run() 方法有什么区别
769 0
|
网络安全
socket服务部署到服务端后启动失败Cannot assign requested address: bind 的总结
socket服务部署到服务端后启动失败Cannot assign requested address: bind 的总结
850 0
|
消息中间件 负载均衡 Kafka
Kafka的ISR和OSR的作用分别是什么
Kafka的ISR和OSR的作用分别是什么
984 3
|
网络协议 安全 前端开发
QUIC 和 TCP:了解为何 QUIC 是未来的网络协议
在过去的三十年里,HTTP(超文本传输协议)一直是互联网的支柱。我们可以通过 HTTP 浏览网页、下载文件、流式传输电影等。这一协议随着时间的推移已经得到了重大改进。