RocketMQ系统性学习-RocketMQ高级特性之消息存储的高效与刷盘策略、Broker 快速读取消息机制

🌈🌈🌈🌈🌈🌈🌈🌈
【11来了】文章导读地址:点击查看文章导读!
🍁🍁🍁🍁🍁🍁🍁🍁

消息存储的高效与刷盘策略

RocketMQ 是通过文件进行存储消息的,那 RocketMQ 是如何保证存储的高效性的呢?

  1. 首先是通过对磁盘进行 顺序写 可以保证高性能的文件存储:

    • 随机写速度 10KB/s
    • 顺序写速度 600MB/s

    (图片来源于网络)

    在这里插入图片描述

  2. 文件拷贝利用了 零拷贝 以及内存映射技术(MMP)

    通过使用零拷贝减少数据拷贝次数

    利用内存映射技术(MMP)可以像读写磁盘一样读写内存,可以获得很大的 IO 提升,但是写道 MMP 中的数据并没有被真正写到磁盘中,操作系统会在程序主动调用 flush 的时候才把数据真正的写入到磁盘

  3. 刷盘策略:分为同步刷盘和异步刷盘

    同步刷盘会造成阻塞,需要等待刷盘完成,降低吞吐量

    异步刷盘不会阻塞,提升吞吐量,但是会丢失部分数据

Broker 快速读取消息机制

首先还是通过 DashBoard 项目的页面进行查看,发现检索消息有两种方式:

  1. Topic + Key

    在这里插入图片描述

  2. Topic + MessageId

    在这里插入图片描述

那么这两种检索的方式其实就是通过上边我们讲的 Broker 中文件的布局

不知道大家还记不记得 IndexFile # putKey() 这个方法,就是将一个 Key 放到 IndexFile 中作为索引,那么这里我们通过生产者发送一条消息,其实是会在 Broker 中调用两次 putKey() 这个方法,只不过两个 Key 是不同的,分别是: Topic + KeyTopic + MessageId,这样当然就可以通过这两种方式来检索消息了!

而 IndexFile 既然存储了这两个 Key 所对应消息的索引,也就是在 Commitlog 中的物理偏移量,这个类就一定还提供了根据 Key 查询消息在 Commitlog 中物理偏移量的方法,也就是 IndexFile # selectPhyOffset,在这个方法中,会通过传入的 Key 在 IndexFile 中查询到对应的索引,从索引中取出对应的物理偏移量 phyOffset,流程如下:

  1. 根据 Key 拿到哈希值,并且对哈希槽数量取模,得到这个 Key 在哈希槽中的相对位置
  2. 去哈希槽中取到这个 Key 在索引数据列表中的位置,在索引数据列表中拿到这个 Key 的索引,就可以取出这个索引的在 Commitlog 中的物理偏移量 phyOffset

在这里插入图片描述

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

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

相关文章

中小型教育网络安全解决方案

热门IT技术视频教程:https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 一、中小型教育网络的安全现状及挑战 当前,校园网的安全形势非常严峻,大量的垃圾邮件、黑客攻击、病毒蠕虫等困扰着管理者。而且这些作…

前端---后端 跨域?

一、跨域 ? 跨域(Cross-Origin Resource Sharing,CORS)是浏览器的一项安全功能,它用于限制一个域名下的文档如何从另一个不同的域名、端口或协议请求资源。跨域资源共享(Cross-Origin Resource Sharing&am…

27. 过滤器

Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfigFi…

mask rcnn训练基于labelme生成的数据集

1.下载mask rcnn源码 此处使用的mask rcnn源码来自于B站博主霹雳吧啦Wz 2.安装labelme sudo apt install python3-pyqt5 pip install labelme如果运行出现QT的错误,可能是与我一样遇到自己装了C版本的QT 解决:运行命令 unset LD_LIBRARY_PATH2.使用lab…

Midjourney V6 引爆社交媒体,AI图像与照片的差别消失;LangChain的2023AI发展状况总结

🦉 AI新闻 🚀 Midjourney V6 引爆社交媒体,AI图像与照片的差别消失 摘要:Midjourney V6 第二次社区评价震惊网友,神图细节逼真,光影效果逆天,皮肤质感细腻,已超越昨日版本。V6即将…

理解AI思维链:AI领域的核心概念及其意义

理解AI思维链:AI领域的核心概念及其意义 引言AI思维链的定义AI思维链的重要性实际应用案例分析面临的挑战与未来展望结语 引言 在这个日益由数据驱动的时代,人工智能(AI)已经成为科技领域的一颗耀眼的明星,其影响力遍…

Java网络编程原理与实践--从Socket到BIO再到NIO

文章目录 Java网络编程原理与实践--从Socket到BIO再到NIOSocket基本架构Socket 基本使用简单一次发送接收客户端服务端 字节流方式简单发送接收客户端服务端 双向通信客户端服务端 多次接收消息客户端服务端 Socket写法的问题BIO简单流程BIO写法客户端服务端 BIO的问题 NIO简述…

【Pytorch】学习记录分享6——PyTorch经典网络 ResNet与手写体识别

【Pytorch】学习记录分享5——PyTorch经典网络 ResNet 1. ResNet (残差网络)基础知识2. 感受野3. 手写体数字识别3. 0 数据集(训练与测试集)3. 1 数据加载3. 2 函数实现:3. 3 训练及其测试: 1. ResNet &…

Gbase8c认证考试课后题

Gbase8c认证考试课后题 第一次练习 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 第十二题 第十三题 第二次练习 第一题 第二题 第三题 第四题 第五题 第三次练习 第一题 第二题 第三题 第四题 第五题 第四次练习 第一题 第二题 第三…

关于外贸包裹的那些事

大早晨收到一个客户留言,询问能不能看一下他的货物包裹被送到了哪里,然后客户可以安排他的代理人联系去取包裹,我心里的第一感觉是难道包裹丢失了? 于是赶紧起来查看物流单号,单号显示早在半个多月前已经被他的国内代…

万界星空电机行业MES/电机mes

万界星空科技电机行业生产管理MES系统的主要功能: 1、基础数据管理 包含车间的产品材料清单管理,产品的工艺信息(工艺、定额、工厂行程)管理和资源信息(关键设备信息)等等。提供产品配套信息维护及查询&a…

conda环境下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令,报命令无法识别,错误信息如下: PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径&a…