RocketMQ的学习历程(5)----broker内部设计

news2024/10/7 6:41:31

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
      • CommitLog和ConsumeQueue
      • 页缓存和内存映射
      • 刷盘机制
    • 小结

概要

在首个学习历程中,我们已经了解了,RokctMQ简单的工作流程。

如果想要更深的理解RokcetMQ消息处理的流程,broker内部流程的理解是必要的,
这里我们就了解一下Broker内部的工作流程。

整体架构流程

在这里插入图片描述

当Consumer消费消息时,需要先读取ConsumeQueue得到offset,再通过offset找到CommitLog对应的消息内容。

技术名词解释

CommitLog和ConsumeQueue

  • CommitLog:CommitLog是RocketMQ中消息主体以及元数据的存储主体,存储Producer端写入的消息主体内容,消息内容不是定长的。
    1. 在RocketMQ中,所有topic的消息都存储在一个称为CommitLog的文件中,该文件默认最大为1GB,超过1GB后会轮到下一个CommitLog文件。

    2. CommitLog文件存储在${ROCKET_HOME}/store/commitlog目录下。

    3. 顺序写入,随机读写。

    4. 消息只要被写入 commitlog 那么该消息就不会丢失

    5. 消息是非定长的

    6. 文件的命名是以 commitlog 起始偏移量命名的

  • ConsumeQueue:消息消费队列引入的目的主要是提高消息消费的性能。
    1. 由于RocketMQ是基于主题topic的订阅模式,消息消费是针对主题进行的,如果要遍历comitlag文件中根据topic检索消息是非常低效的。
    2. Consumer即可根据ConsumeQueue来查找待消费的消息。其ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定Topic下的队列消息在CommiL og中的起始物理偏移量ofiset,消息大小size和消息JTag的HashCode值。consumequeue文件可以看成是基于topic的commitlog索引文件
    3. 故consumequeue文件夹的组织方式如下: topic/queue/file三层组织结构,具体存储路为:$HOMEistorelconsumequeve(topiclqLeuel)ifieName)。
    4. 同样consumequecue文件采取定长设计,每一个条目共20个字节,分别为8字节的comitlog物理偏移量、4字节的消息长度、8字节tag hashcode,单个文件由30W个条目组成,可以像数组一样随机访问每一个条目,每个ConsumeQueue文件大小约5.72M;

页缓存和内存映射

  • 页缓存和内存映射页缓存(PageCache)是OS对文件的缓存,用于加速对文件的读写,内存映射是指将文件映射到进程的地址空间,使得应用程序可以像访问内存一样访问文件
    1. RocketMQ使用了内存映射文件的办法,将一个文件映射到进程的地址空间,实现文件的磁盘地址和进程的一段虚拟地址关联,实际上是利用了NIO 中的 FileChannel 模型。RocketMQ通过使用内存映射文件来提高IO访问性能,无论是CommitLog、 ConsumeQueue还是IndexFile,单个文件都被设计为固定长度,如果一个文件写满以后再创建一个新文件,文件名就为该文件第一条消息对应的全局物理偏移量。

    2. RocketMQ中的页缓存和内存映射都是文件系统中的缓存机制。RocketMQ单独创建一个MappedByteBuffer内存缓存池,用来临时存储数据,数据先写入该内存映射中,然后由commit线程定时将数据从该内存复制到与目的物理文件对应的内存映射中。

刷盘机制

RocketMQ提供了同步和异步两种刷盘方式
在这里插入图片描述

  1. 同步刷盘方式能够保证数据被写入硬盘,做到真正的持久化,但是也会让系统的写入速度受制于磁盘的IO速度;
  2. 而异步刷盘方式在将数据写入缓冲之后就返回,提供了系统的IO速度,却存在系统发生故障时未来得及写入硬盘的数据丢失的风险。

小结

本节我们简单了解了broker内部的简单流程知识,期待一起进步。

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

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

相关文章

【挑战全站最全】Linux系统的安装与配置教程——以CentOS为例

🚀作者:那个叫马尔的大夫🚀 ⭐专栏:操作系统⭐ 🌼内容:主要分享一些关于Linux操作系统的知识 🥧不忘初心,砥砺前行~ 目录 一、用到的软件环境——虚拟机软件(必需&#…

调用函数不仅仅只是传递正确的参数类型

这里有一个新手犯下的一个典型错误。 假设,我们想调用这个函数,GetBinaryType。 void sample() { if (GetBinaryType(TEXT(“explorer.exe”), ????)) { … } } 请问,这里的问号处应该传递什么类型的参数?你可能会说&#x…

python、pyqt5实现人脸检测、性别和年龄预测

摘要:这篇博文介绍基于opencv:DNN模块自带的残差网络的人脸、性别、年龄识别系统,系统程序由OpenCv, PyQt5的库实现。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取图片识别,本文提供完整的程…

设计模式入门:策略模式

现有一套模拟鸭子游戏,可以一边游泳,一边呱呱叫。 每种鸭子都会呱呱叫和游泳,只是外观不同。因此,quack和swim放在父类中,display放在子类中实现。 增加新的功能:鸭子飞翔。 1 我们可能想到直接在父类中增…

LeetCode——最小化字符串长度

目录 一、题目 二、题目解读 三、代码 1、set去重 2、用一个二进制数记录每个字母是否出现过 一、题目 6462. 最小化字符串长度 - 力扣(Leetcode) 给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次: 在字符串…

聊一聊数据库事务的那些事(隔离级别,传播行为)

我们平时使用事务的时候,可能脑子里面想到和事务有关的知识点无非就是,ACID,事务隔离级别那一套,使用的事务也就是是通过注解的形式,或者手动开启事务。更细致一点的问题或许没有深究下去,比如事务的传播行…

STM32F407的PWM

文章目录 32的PWM资源PWM输出原理捕获/比较模式寄存器(TIMx_CCMR1/2)捕获/比较使能寄存器(TIMx_CCER)捕获/比较寄存器(TIMx_CCR1~4) 库函数版本的PWM波输出开启 TIM3 时钟以及复用功能时钟置 ,配…

对CT数据进行最小最大值归一化(Min-Max Normalization)和消除过暗过亮值处理

文章目录 PIL库的图像失真问题使用最小最大值归一化(Min-Max Normalization)预处理消除过暗过亮值pytorch中对tensor使用最小最大值归一化处理(torchvision.transforms) 我们在处理CT图像时(以dcm格式为例)…

全栈小程序开发路线

目录 个人心得: 我的学习路线 个人心得: 我擅长的是小程序开发和技术变现,从2021年至今开发上线20于个小程序,矩阵用户超过10万,变现10万左右。 以下是部分小程序截图,追风口做的小程序,基本…

「Win」Windows注册表介绍与操作

✨博客主页:何曾参静谧的博客 📌文章专栏:「Win」Windows程序设计 相关术语 Windows的注册表:是一个重要的系统组件,用于存储操作系统和应用程序的配置信息。它类似于一个数据库,包含了各种键值对、参数、设…

Vue报错:Error: error:0308010C:digital envelope routines::unsupported解决

问题 node 环境 Node.js v18.14.2 使用npm start.出现以下报错 Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10) at module.exports (F:\RuoYi-Cloud\CourseSched…

SWAT模型系统学习(建模方法、实例应用、高级进阶)

目前,水环境问题逐渐成为制约社会经济和环境可持续发展的重要因素。根据国内外研究表明,受全球环境变化和经济快速发展的影响,面源污染已逐渐成为水环境污染的第一因素。但面源污染由于具有排放分散、隐蔽,排污随机、不确定、不易…

搜索算法(三) 回溯法

1.回溯法 回溯法可以理解成一种特殊的深度优先算法,比起普通的DFS,多了还原当前节点的一步。 修改当前节点、递归子节点、还原当前节点。 本质是一种试错的思想。 维基百科: 2.例题 1) 力扣https://leetcode.cn/problems/pe…

树莓派安装系统

0. 实验准备 树莓派一个,TF卡(4GB以上)一个,读卡器一个 1. 使用官方提供的工具 在搜索引擎中搜索树莓派(不要用百度,建议使用必应的国际版进行搜索),我这里直接放上树莓派官方超链…

深入篇【Linux】学习必备:理解【Linux软件包管理器】yum + yum的具体使用 + yum下载的有趣指令

这里写目录标题 Ⅰ.Linux软件包管理器yum①.什么是软件包/什么是yum②.linux的软件生态与yum源③.关于rzsz Ⅱ.yum基本指令①.查看软件②.安装软件③.卸载软件 Ⅲ.yum下载的好玩指令①.sl②.linux_logo③.elinks Ⅰ.Linux软件包管理器yum yum 是一个 Shell 前端软件包管理器。基…

C++ 多态 最详细图文+代码讲解

感谢各位 点赞 收藏 评论 三连支持 本文章收录于专栏【C进阶】 ❀希望能对大家有所帮助❀ 本文章由 风君子吖 原创 回顾 上篇文章,我们学习了继承的相关知识,详细解刨了继承中的各种细节,而本章内容将在继承的基础上学习多态 多态的概念…

Dreamweaver如何进行网页开发?

文章目录 0.引言1.安装Dreamweaver2.编写第一个网页 0.引言 笔者本科学习的编程语言主要是关于桌面开发的,对编程有一定的基础,而编程除了关于桌面软件开发(VisualStudio如何进行桌面软件开发?),还有手机应…

网络安全自学笔记+学习路线(超详细)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

c语言编程练习题:7-193 两小时学完C语言

#include <stdio.h> int main(){int n,k,m;int sum;if (scanf("%d %d %d",&n,&k,&m)!EOF){sum n-k*m;}printf("%d",sum);return 0; }

(学习日记)2023.04.28

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…