mq存储文件
存储文件
启动broker之后我们可以看到下面这些文件
1.config包含了运行期间一些配置信息,主要包括下列信息。
consumerFilter.json:主体消息过滤信息
consumerOffset.json:集群消费模式消息消费进度
delayOffset.json:延时消息队列拉取进度
subscriptionGroup.json:消息消费组配置
topic.json:topic配置属性
2.consumequeue:消息消费队列存储目录。
3.index:消息索引文件存储目录
4.abort:如果存在abort文件说明Broker非正常关闭,该文件默认启动时创建,正常退出前删除。
5.checkpoint:文件检查点,存储commitlog文件最后一次刷盘时间戳,consqueue最后一次刷盘时间,index索引文件最后一次刷盘时间戳。
commitlog每条消息的前面4个字节存储该条消息的总长度。
commitlog文件默认大小为1G,可通过broker配置文件中设置mappedFileSizeCommitLog属性来改变大小。
commitlog消息的查找
Commitlog#getMinOffset
获取当前Commitlog目录的最小偏移量,首先获取目录的第一个文件,如果文件可用则返回该文件的起始偏移量,否则返回下一个文件的起始偏移量
根据偏移量与消息长度查找消息:
如果只根据消息偏移查找消息,则首先找到文件内的偏移量,然后尝试读取4字节获取消息的实际长度,最后读取指定字节即可。
ConsumeQueue文件
ConsumeQueue文件可以看成是Commitlog关于消息消费的“索引”文件,consumequeue第一级目录为消息主题,第二级目录为主题的消息队列:
每一个Consumequeue条目不会存储消息的全量信息,8字节commitlog offset+4字节size+8字节tag hashcode
单个ConsumeQueue文件默认包含30w个条目,单个文件的长度为30w*20字节,单个ConsumeQueue文件可以看出是一个"ConsumeQueue条目"的数组,其下标为ConsumeQueue的逻辑偏移量,消息消费进度存储的偏移量即逻辑偏移量。其构建机制是当消息到达Commitlog文件后,由专门的线程产生消息转发任务,从而构建消息消费队列文件与下文提到的索引文件。
根据逻辑偏移消费消息:
ConsumeQueue#getIndexBuffer:
根据消息存储时间来查找:
二分查找法通过偏移量找时间,然后对比时间戳,先根据mappFile从commitlog中选中一段,再二分查找
mq存储文件的更多相关文章
- MQ服务器奔溃解决过程
1.MQ服务器崩溃调节: 今天具安卓前端反应, 从昨天下午开始线上服务器使用 电话号码登陆和 使用电话号码注册功能不能使用, 经过前端仔细排查怀疑是后端问题,之后经过与ios前端 确认, 定位为后端服 ...
- 《我想进大厂》之MQ夺命连环11问
继之前的mysql夺命连环之后,我发现我这个标题被好多套用的,什么夺命zookeeper,夺命多线程一大堆,这一次,开始面试题系列MQ专题,消息队列作为日常常见的使用中间件,面试也是必问的点之一,一起 ...
- mq内存映射
MappedFileQueue的封装 MappedFileQueue是MappedFile的管理容器,MappedFileQueue是对存储目录的封装. 查找MappedFile: 1.根据时间戳来查 ...
- 【mq读书笔记】mq读写分离机制
mq根据brokerName查找Broker地址的过程 mq根据MessageQueue查找Broker地址的唯一依据是brokerName,同一组Broker(M-S)他们的bokerName相同但 ...
- 【mq读书笔记】消费进度管理
从前2节可以看到,一次消费后消息会从ProcessQueue处理队列中移除该批消息,返回ProcessQueue最小偏移量,并存入消息进度表中.那消息进度文件存储在哪合适呢? 广播模式:同一个消费组的 ...
- 【mq读书笔记】如何保证三个消息文件的最终一致性。
考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致. commitlog,consumeQueue遍历每一条消息 ...
- R - MQ
1. rabbit MQ 安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 ...
- 在 Windows 上安装Rabbit MQ 指南
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...
- Android获取可存储文件所有路径
引言:大家在做app开发的时候,基本都会保存文件到手机,android存储文件的地方有很多,不像ios一样,只能把文件存储到当前app目录下,并且android手机由于厂家定制了rom,sdcard的 ...
随机推荐
- 20202427-张启辰《Python3初学:罗马数字转阿拉伯数字》
目录 20202427-张启辰<Python3初学:罗马数字转阿拉伯数字> 1.规则 2.局限性 3.Python3解决 20202427-张启辰<Python3初学:罗马数字转阿拉 ...
- 【Flutter 1-5】运行Flutter的第一个项目——计数器
创建项目 创建Flutter项目有很多种方法,各个IDE工具也都集成了创建Flutter项目的快捷操作.我们这里列举三种方式:使用命令行创建.使用Android Studio创建和使用VSCode创建 ...
- Spring 5的最后一个特性版本5.3发布,4.3将于12月终止维护
10月27日,Spring Framework团队宣布了5.3版本正式GA,Spring用户可以在repo.spring.io和Maven Central上获取到最新版本的依赖包. JDK的版本支持 ...
- BCVP,想真正为社区做努力的开发者们
基于Net/Core,快速搭建 API & SPA 及微服务应用组织 BASE NETCORE (VUE) PROJECT TEAM 每一个.NET开发者都可以通过自己的开源项目(最好可以配套 ...
- 浅析I/O模型-select、poll、epoll
I/O流 概念 (1)c++中将数据的输入输出称之为流(stream),在c++中,流被定义为类,成为流类(stream class),其定义的对象为流对象. (2)文件,套接字(socket),管道 ...
- CF1396E——Distance Matching
传送门:QAQQAQ(题面翻译) 以后博客可能一直咕咕咕了.一些做题的思考可能会直接放在代码里而不是单独写博客,因为这样太浪费时间,只有一些比较新的题才会单独写博客 思路:对于这种构造可行解使得权值和 ...
- 20181301刘天宁 MyOD
一.题目要求: 1.复习c文件处理内容编写myod.c 2.用myod XXX实现Linux下od -tx -tc XXX的功能 3.main与其他分开,制作静态库和动态库 4.编写Makefile ...
- 腾讯开源 APIJSON 连创五个第一
腾讯第一个码云推荐项目,// 其它最早创建的是 TencentOS-tiny(码云) 2019.8.23 腾讯第一个码云GVP项目,// 其它最早创建的是 TencentOS-tiny(码云) 201 ...
- EF6 Code First 博客学习记录
学习一下ef6的用法 这个学习过程时按照微软官网的流程模拟了一下 就按照下面的顺序来写吧 1.连接数据库 自动生成数据库 2.数据库迁移 3.地理位置以及同步/异步处理(空了再补) 4.完全自动迁移 ...
- 快速了解阿里微服务热门开源分布式事务框架——Seata
一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...