【mq读书笔记】消息消费队列和索引文件的更新
ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟。
mq通过开启一个线程ReputMessageService来准时转发commitLog文件更新事件,相应的任务处理器根据转发的消息及时更新ConsumeQueue,IndexFile文件
DefaultMessageStore#start
ReputMessageService线程每执行一次任务推送休息1毫秒旧继续尝试推送消息到消息消费队列和索引文件。
返回reputFromOffset偏移量开始的全部有效数据,然后循环读取每一条消息。
在DefaultMessageStore的构造方法中:
topic:消息主题名称
queueId:消息队列ID
commitLogOffset:消息物理偏移量
msgSize:消息长度
tagsCode:消息过滤tag hashcode
storeTimestamp:消息存储时间戳
consumeQueueOffset:消息队列偏移量
key:消息索引
success:是否成功解析道完整的消息
uniqKey:消息唯一键
sysFlag:消息系统标记
preparetransactionOffset:消息预处理事务偏移量
propertiesMap:消息属性
bitMap:位图
根据消息主题与队列ID,先获取对应的ConsumeQueue文件。
最后会调用这个方法,一次将消息偏移量,消息长度,tag hashcode写入到ByteBuffer中,并根据consumeQueueOffset计算ConumeQueue中的物理地址,将内容追加到ConsumeQueue的内存映射文件中,ConsumeQueue的刷盘方式固定为异步刷盘模式
如果messageIndexEnable设置为true。
获取或创建IndexFile文件并获取所有文件最大的物理偏移量。如果该消息的物理偏移量小于索引文件中的物理偏移量,则说明是重复数据,忽略本次索引构建。
如果消息的唯一键不为空,则添加到Hash索引中,以便加速根据唯一键检索消息
构建索引键,mq支持为同一个消息建立多个索引,多个索引键空格分开。
【mq读书笔记】消息消费队列和索引文件的更新的更多相关文章
- 【mq读书笔记】消费进度管理
从前2节可以看到,一次消费后消息会从ProcessQueue处理队列中移除该批消息,返回ProcessQueue最小偏移量,并存入消息进度表中.那消息进度文件存储在哪合适呢? 广播模式:同一个消费组的 ...
- 【mq读书笔记】消息队列负载与重新分配(分配 新队列pullRequest入队)
回顾PullMessageService#run: 如果队列总没有PullRequest对象,线程将阻塞. 围绕PullRequest有2个问题: 1.PullRequest对象在什么时候创建并加入p ...
- 【mq读书笔记】如何保证三个消息文件的最终一致性。
考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致. commitlog,consumeQueue遍历每一条消息 ...
- 【mq读书笔记】mq事务消息
关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...
- 【mq读书笔记】顺序消息
注意异常情况导致整个消费无限重试 阻塞消费 mq支持局部消息顺序消费,可以确保同一个消息消费队列中的消息被顺序消费.看下针对顺序消息在整个消费过程中做的调整: 队列负载: DefaultMQPushC ...
- 【mq读书笔记】定时消息
mq不支持任意的时间京都,如果要支持,不可避免的需要在Broker层做消息排序,加上持久化方面的考量,将不可避免地带来巨大的性能消耗,所以rocketMQ只支持特定级别的延迟消息. 在Broker短通 ...
- 【mq读书笔记】消息拉取长轮训机制(Broker端)
RocketMQ并没有真正实现推模式,而是消费者主动想消息服务器拉取消息,推模式是循环向消息服务端发送消息拉取请求. 如果消息消费者向RocketMQ发送消息拉取时,消息未到达消费队列: 如果不启用长 ...
- 【mq读书笔记】消息拉取
疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...
- 【mq读书笔记】mq消息存储
comitlog文件 ConsumerQueue文件 IndexFile文件 RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件. 为了提高消息消费的效率RocketMQ引入 ...
随机推荐
- SP22343 Norma--序列分治
Norma 传送门 题意简化: 定义一个区间的贡献为 \(max*min*len\),求给定序列中所有子区间的总贡献和 题解 考虑 \(O(n*log_2n)\) 的复杂度的做法 数据结构??? yz ...
- STM32入门系列-GPIO概念介绍
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...
- NOIP2018 填坑记
Oct,22ed,2018 DAY -18 又是颓废的一天呢 我好菜啊,一个圆方树弄了一整天(点双怎么那么毒瘤).(铁人两项怎么那么多点) Oct,23rd,2018 DAY -17 又双叒叕颓了一天 ...
- Java_基础(二)
思想 面向过程的思想: 怎么按步骤把问题解决, 并将步骤编程方法, 一步一步事项, 适合简单不需要协作的任务 面向对象的思想: 怎么设计这个事务 区别与联系 都是解决问题的思维方式, 都是代码组织的方 ...
- 【Kata Daily 190917】Numericals of a String(字符出现的次数)
题目: You are given an input string. For each symbol in the string if it's the first character occuren ...
- TCP性能分析与调优策略
网络传输 传播延迟: 消息从发送端到接收端需要的时间,是信号传播距离和速度的函数 传输延迟: 把消息中的所有比特转移到链路中需要的时间,是消息长度和链路速率的函数 处理延迟: 处理分组首部.检查位错误 ...
- .net 实现 一二级分类
public List<Model.Category> CategoryPid(int id = 0) { string sql = "select * from categor ...
- python爬虫10 b站爬取使用 selenium+ phantomJS
但有时候 我们不想要让它打开浏览器去执行 能不能直接在代码里面运行呢 也就是说 有没有一个无形的浏览器呢 恩 phantomJS 就是 它是一个基于 WebKit 的浏览器引擎 可以做到无声无息的操作 ...
- Java实现酒店客房管理系统
这篇文章主要为大家详细介绍了Java实现酒店客房管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Java实现酒店客房管理系统的具体代码,供大家参考,具体内容如下 Log ...
- Python - Git仓库忽略提交规则 & .gitignore配置
Git 忽略文件提交的方法 有三种方法可以实现忽略Git中不想提交的文件. 在Git项目中定义 .gitignore 文件 这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件 ...