消息中间件之RocketMQ源码分析(十四)

Broker内存映射机制与高效磁盘

RocketMQ在存储涉及中通过内存映射、顺序写文件等方式实现了高吞吐。
RocketMQ的基本数据结构:
CommitLog:RocketMQ对存储消息的物理文件的抽象实现,也就是对物理CommitLog文件的具体实现。MappedFile:CommitLog文件在内存中的映射文件,映射文件同时具有内存的写入速度和与磁盘一样可靠的
持久化方式.
MappedFileQueue:映射文件队列中有全部的CommitLog映射文件,第一个映射文件为最先过期的文件,最后一个文件是最后过期的文件,最新的消息总是写入最后一个映射文件。
在这里插入图片描述
每个MappedFileQueue包含多个MappedFile,就是真是的物理CommitLog文件.在Java中通过java.nio.MappedByteBuffer来实现文件的内存映射,即文件读写都是通过MappedByteBuffer(其实是PageCache)来操作的。写入数据时先加锁,然后通过Append方式写入最新MappedFile。对于读取消息,大部分情况下用户只关心最新数据,而这些数据都在PageCache中,也就是说,读写文件就是在PageCache中进行的,其速度几乎等于直接操作内存的速度

Broker文件刷盘机制

消息存储完成后,会被操作系统持久化到磁盘,也就是刷盘。
RocketMQ支持两种刷盘方式,在Broker启动时配置flushDiskType=SYNC_FLUSH表示同步刷盘.配置flushDiskType=ASYNC_FLUSH表示异步刷盘
刷盘涉及以下3个线程服务。如图所示
在这里插入图片描述

GroupCommitService

GroupCommitService就是CommitLog.GroupCommitService–同步刷盘任务。在Broker存储消息到PageCache后,在Broker存储消息到PageCache后,同步将PageCache刷到磁盘,在返回客户端消息并写入结果
在这里插入图片描述

FlushRealTimeService

FlushRealTimeService就是CommitLog.FlushRealTimeService–异步刷盘服务。在Broker存储消息到PageCache后,立即返回客户端写入结果,然后异步刷盘服务将PageCache异步刷到磁盘
在这里插入图片描述

CommitRealTimeService

CommitRealTimeService就是CommitLog.CommitRealTimeService–异步转存服务。Broker通过读写分离将消息写入直接内存(Direct Meomory,简称DM),然后通过异步转存服务,将DM中的数据再次存储到PageCache中,以供异步刷盘服务将PageCache刷到磁盘中,转存服务过程如上
在这里插入图片描述
将消息成功保存到CommitLog映射文件后,调用submitFlushRequest()/handleDiskFlush()方法处理刷盘逻辑,
同步刷盘、异步刷盘都是在这个方法中发起的
在这里插入图片描述

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

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

相关文章

汽车信息安全--S32K3的HSE如何与App Core通信(1)?

目录 1.S32K3 网络安全架构 2. MU的通信流程 2.1 总体描述 2.2 Host 消息类型 2.3 寄存器概述

同等学力申硕-计算机专业-数学基础-历年真题和答案解析

同等学力申请硕士学位考试是比较适合在职人员的提升学位方式,了解过的人应该都知道,现在社会的竞争压力越来越大,为了提高职业生存能力,提升学位在所难免。 为了通过同等学力申请硕士学位考试,对于计算机专业的人来说…

Pandas时间序列数据补全

一、问题 时间序列数据缺失,将其补全。 如下图所示,数据存在缺失秒级的情况 二、方法 1、需要将时间戳字段设置成 df 的索引 2、使用df.resample()方法 (1)上采样(将上一条数据作为当前缺失数据) resample()中的参数&#x…

Spring、SpringBoot、SpringCloud三者的区别

Spring、Spring Boot 和 Spring Cloud 是构建企业级 Java 应用程序的不同层次的框架和工具。下面详细介绍它们之间的区别: 1. Spring框架: 概述: Spring 是一个全功能的企业级 Java 框架,提供了依赖注入、面向切面编程、事务管理…

*MYSQL--索引*

一:介绍 在MYSQL当中,索引的使用类似于书当中目录的作用,索引的使用能够让查询更加的迅速,比方说搜索mysql这个单词的时候,可以先从首字母为m开头的字母进行查找,这样就大大减少了搜索的时间,而不是从头到尾进行搜索,提高查询的速度 二:类型 主要分为两大类,一种是根据底层的结…

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 灰狼优化算法: 卷积神经网络-长短期记忆网络: 四、完整程序下载: 一、程序及算法内容…

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod?Pod在K8S集群中的使用方式? 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器(infrastructure container) 2.2.2…

【Vuforia+Unity】AR03-圆柱体物体识别(Cylinder Targets)

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意,您不必上传所有三个部分的图片,但您需要先为侧面曲面关联一个图像&#…

流程图:理解、创建与优化的视觉工具

流程图:理解、创建与优化的视觉工具 引言 在日常生活和工作中,我们经常遇到需要描述一系列步骤或过程的情况。这些步骤可能是制作一杯咖啡、完成一个项目,或者是解决一个复杂的数学问题。流程图,作为一种强大的视觉工具&#xf…

题目: 数组二叉树(C++)

题目描述 二叉树也可以用数组来存储,给定一个数组,树的根节点的值存储在下标1,对于存储在下标N的节点,它的左子节点和右子节点分别存储在下标2N和2N1,并且我们用值-1代表一个节点为空。 给定一个数组存储的二叉树&am…

深入理解 Vue2 指令

在 Vue2 中,指令是一种特殊的属性,用于在模板中动态地改变 DOM 元素的行为。Vue2 提供了许多内置指令,使得我们可以更加方便地对 DOM 进行操作。在这篇博客中,我们将深入了解 Vue2 中的一些常用指令。 v-bind 指令: v-…

android pdf框架-4,分析vudroid源码1

前言 上文基于recyclerview修改,没有自定义layoutmanager,其实并不是一个好的阅读器,缩放功能有限,放大了容易内存溢出. 本文,从修改vudroid源码来完成一个阅读器. 为什么是vudroid? 它是基于view系统的相对完整的功能代码没有那么抽象,简洁容易修改功能没有完善,有修改空间…

关于正则中的Pattern和Matcher的使用

关于正则中的Pattern和Matcher的使用 1 简介2 语法3 案例 在项目中, 经常需要对请求的数据进行格式,内容校验, 而使用正则表达式, 比较简单优雅实现校验功能. 故记录一下正则中Pattern和Matcher的使用. 1 简介 ​ java.util.regex包下的Pattern和Matcher都是Java中用于正则表达…

Spring启动生命周期

Spring Boot 生命周期详解 Spring Boot 应用程序的生命周期包含几个阶段,每个阶段都有特定的事件和钩子,允许开发者在应用程序的不同生命周期阶段插入自定义逻辑。以下是 Spring Boot 生命周期的主要阶段和对应的事件: 准备阶段:…

【Docker实操】部署php项目

概述 最终达成的容器部署结构和原理如下图: 一、获取nginx、php官方镜像 docker pull nginx //拉取nginx官方镜像 docker pull php:7.4-fpm //拉取php官方镜像需要获取其他可用的php版本,可以上【docker hub】搜索【php】,所有的【xxx-fp…

【工具】阿莫智能设备之脱机烧录器K202C-1

注意,本文档仅仅是介绍烧录器的资料构成,并非烧录器的说明书,详细请看各对说明书及视频。 1. 资料图解 首先需要下载资料,通常稳定发布版本可以从 www.amomcu.cn 下载, 也可以向我们客服获取最新版本, 获…

浅谈redis之SDS

SDS 什么是SDSSDS结构len的作用free的作用buf的作用简单示例 SDS机制重新分配内存分配内存机制小于1MB情况大于1MB情况为什么这样分配 惰性释放内存 什么是SDS SDS:全名 simple dynamic string,意为简单动态字符串,作为redis里的一种数据结构…

六.生成makefile文件 并基于makefile文件编译opencv

1.点击【Generate】 生成makefile文件 2.进入目录下编译opencv源码,mingw32-make -j 8 3..编译出现报错 4.取消[WITH_OPENCL_D3D11_NV]选项,再次【configure】【generate】 然后再次编译:mingw32-make -j 8

科技守护大唐遗宝,预防保护传承千年

​ 一、“大唐遗宝——何家村窖藏出土文物展” 陕西历史博物馆的“唐朝遗宝——何家村窖藏出土文物展”算得上是博物馆展览的典范。展览不仅在于展现了数量之多、等级之高、种类之全,更在于对唐朝历史文化的深入揭露。 走入大唐财产展厅,好像穿越千年前…

解决TCP中Bind failed烦恼

文章目录 概要样例代码 概要 当第一次运行服务端时正常,第二次运行时出现Bind failed问题。 在实际使用中,如果您尝试启动一个服务端程序并且遇到了 “Bind failed” 的错误信息,这通常意味着尝试绑定(bind)的端口已…