云原生中间件RocketMQ-核心原理之同步_异步刷盘,同步_异步复制解析

news/2024/5/5 4:24:18/文章来源:https://blog.csdn.net/qq_35427589/article/details/126618092

文章目录

    • 发送逻辑
    • 消费逻辑
    • 刷盘机制
      • 同步刷盘
      • 异步刷盘
      • 配置
    • 同步/异步复制解析
      • 异步复制
      • 同步复制
      • 配置
      • 推荐使用

发送逻辑

发送时,Producer将不同topic的所有消息都会顺序写入Commit Log中,Broker端的后台服务线程—ReputMessageService不停地分发请求并异步构建ConsumeQueue(逻辑消费队列)和IndexFile(索引文件)数据,不停的轮询,将当前的consumeQueue中的offSet和commitLog中的offSet进行对比,将多出来的offSet进行解析,然后put到consumeQueue中的MapedFile中。
ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定Topic下的队列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息Tag的HashCode值。而IndexFile(索引文件)则只是为了消息查询提供了一种通过key或时间区间来查询消息的方法(ps:这种通过IndexFile来查找消息的方法不影响发送与消费消息的主流程)。

消费逻辑

消费者在消费的时候先从consumequeue中根据偏移量定位到具体的commitlog物理文件,然后根据一定的规则(offset和文件大小取模)在commitlog中快速定位。

刷盘机制

消息先存到内存中,然后根据刷盘策略刷到磁盘上。
RocketMQ的消息是存储到磁盘上的,这样既能保证断电后恢复, 又可以让存储的消息量超出内存的限制。RocketMQ为了提高性能,会尽可能地保证磁盘的顺序写。消息在通过Producer写入RocketMQ的时 候,有两种写磁盘方式,分布式同步刷盘和异步刷盘。
在这里插入图片描述

同步刷盘

在返回写成功状态时,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写成功的状态。同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响,一般适用于金融业务应用领域。

异步刷盘

在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大;当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。提高了MQ的性能和吞吐量。

配置

同步刷盘还是异步刷盘,是通过Broker配置文件里的flushDiskType参数设置的,这个参数被设置成SYNC_FLUSH、ASYNC_FLUSH中的一个。

同步/异步复制解析

如果一个Broker组有Master和Slave,消息需要从Master复制到Slave 上,有同步和异步两种复制方式。
同一组Broker有Master - Slave角色

异步复制

同步复制方式是等Master和Slave均写 成功后才反馈给客户端写成功状态;
在同步复制方式下,如果Master出故障,Slave上有全部的备份数据,容易恢复,但是同步复制会增大数据写入延迟,降低系统吞吐量。

同步复制

异步复制方式是只要Master写成功 即可反馈给客户端写成功状态。
在异步复制方式下,系统拥有较低的延迟和较高的吞吐量,但是如果Master出了故障,有些数据因为没有被写 入Slave,有可能会丢失;

配置

同步复制和异步复制是通过Broker配置文件里的brokerRole参数进行设置的,这个参数可以被设置成ASYNC_MASTER、 SYNC_MASTER、SLAVE三个值中的一个。
Broker的配置文件默认路径:/opt/rocket/conf/broker.conf

推荐使用

实际应用中要结合业务场景,合理设置刷盘方式和主从复制方式,尤其是SYNC_FLUSH方式,由于频繁
的触发写磁盘动作,会明显降低性能。
通常情况下,应该把Master和Slave设置成ASYNC_FLUSH的刷盘方式,主从之间配置成SYNC_MASTER的复制方式,这样即使有一台机器出故障,仍然可以保证数据不丢。

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位大佬指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

在这里插入图片描述

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

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

相关文章

远程连接elasticsearch

做分布式或者集群的时候,需要对elasticsearch做些配置才可以通过端口访问,我这里是以阿里云为例。 前置要有java环境变量。 在阿里云安全组里面开放9200和9300端口,9200用于测试端口是否连上和查看状态。 elasticsearch国内镜像:…

在线客服系统的优势

对于各电商企业来说,在线客服作为直接触达客户的门面,起着至关重要的作用,而优质的话术可以起到催化剂的作用,而快捷回复就是必备工具。 前言 对于各电商企业来说,在线客服作为直接触达客户的门面,起着至关…

深入Spring Boot :整合Redis详解

Spring Boot为Redis的Lettuce和Jedis客户端库提供了基本的自动配置,并且可以使用Spring Data Redis完成更多的操作。本篇将介绍如何整合Redis及使用Redis实现简单的查询缓存,主要包括以下7部分内容: 缓存 Redis Lettuce Spring Data Redis…

瑞吉外卖 —— 2、后台登录和登出

1、后台登录功能 1.1、接口分析 通过浏览器调试工具 F12 可以发现,在登录页面点击登录后,发送 POST 请求 http://localhost:8080/employee/login ,并将输入的账号和密码信息以 JSON 格式发送给后台 前端校验代码如下: 1.1.2、登…

Hadoop源码解析之Mapper数量计算公式

前言 据说,自0.20.0版本开始,Hadoop同时提供了新旧两套MapReduce API,并在后续版本中也同时支持这两种API的使用。新版本MR API在旧的基础进行了扩展,也制定了新的split计算方式。新版本MR API在包org.apache.hadoop.mapreduce及…

Python基于Django的汽车销售网站

本汽车销售商城采用的数据库是Mysql,使用Django框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 汽车销售商城主要是为了提高工作人员的工作效率和更方便快捷的满足用户…

Win7下安装Docker(虚拟机win7)

在虚拟机VM里面安装一个win7用于安装Docker docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 直接下载圈起来的这个就好了 直接拷贝到虚拟机系统win7里面安装,全部勾起来直接下一步安装即可 安装好后,会有三个图标 直接点击Dock…

自动化情侣微信早报信息定时推送

文章目录一、效果展示二、配置config.txt(重点)2.1 填写appID和appsecret2.1 创建测试模板填写template_id2.4 填写user2.5 填写weather_key2.6 填写剩下其他框选内容即可三、运行软件3.1 选择config.txt文件并设定时间3.2 运行软件3.3 效果展示一、效果…

12种解决CSS旧问题的新技巧

如果您一直在使用CSS,那么很可能会遇到一些布局或跨浏览器兼容性等问题。例如,CSS3的样式不太适用于IE的某些旧版本。而有时候,当我们准备使用某项功能时,却发现它无法广泛地得到各种浏览器的行为支持。因此,在从事Web…

第13章Linux实操篇-进程管理(重点)

第13章Linux实操篇-进程管理(重点) 文章目录第13章Linux实操篇-进程管理(重点)13.1基本介绍13.2显示系统执行的进程13.2.1基本介绍13.2.2ps详解13.2.3应用实例13.3终止进程kill和killall13.3.1介绍13.3.2基本语法13.3.3最佳实践13.4查看进程树pstree13.4.1基本语法13.4.2常用选…

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第12章 Vue3.X新特性解析 12.1 Vue3.0 新特性

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 文章目录Vue.js核心技术解析与uni-app跨平台实战开发学习笔记第12章 Vue3.X新特性解析12.1 Vue3.0 新特性第12章 Vue3.X新特性解析 12.1 Vue3.0 新特性 Vue3.0 中需要重点关注的两个新特性: 双向数据绑定的原…

JVM资料阅读笔记总结-1

前言 最近读周志明的《深入理解Java虚拟机》以及半栈工程师的Java虚拟机文章,对JVM又重新复习了一遍,每次看后收获都不一样(因为没有debug能力,还是很懵懂),担心会忘记将自己读后总结记录下来 总结内容 j…

期货开户止损是通向成功的保障

一、情绪波动止损法: 如果买入股票后,感觉不好,寝食难安,这说明自己认为买入理由不充分或信心不足,这将影响今后的正常操作,故应果断卖出离场。 二、空间位移止损法: 1、 初始止损法&#xf…

调用MapReuce对文件中各单词出现次数统计

调用MapReduce对文件中各单词出现次数统计 调用MapReuce对文件中各单词出现次数统计一、安装环境二、需求分析 1.创建hadoop账户2.设置Hadoop密码3.为Hadoop用户增加管理员权限4.更新apt5.安装vim6.安装SSH、配置SSH无密码登陆 三、安装java环境 1.安装JDK2.验证JDK安装情况3.…

SpringBoot 启用 GZIP 对响应进行压缩

SpringBoot Web 应用默认是不启用响应数据的压缩,对大的文本类型的响应数据进行压缩是十分必要的,如 JSON, XML 等应用数据,甚至是 JS, CSS 等。 早先的 Web 应用基本是要配置一个叫做 GzipFilter 之类的东西,然后判断请求的 Acc…

Windows与网络基础-1-2-虚拟机安装Windows10和window server2016

目录 一、虚拟机安装软件和ios镜像文件 二、新建虚拟机 2.1 文件—>新建虚拟机 2.2 选择典型安装 2.3 选择稍后安装 2.4 选择操作系统类型和版本 2.5 虚拟机名称和安装路径 2.6 指定磁盘大小 2.7 配置硬件信息 2.8 进入系统安装界面 2.9 选择系统版本 2.10 选择自…

LeetCode精选200道--二叉树篇(二)

二叉树篇(二)前言完全二叉树的节点个数普通二叉树逻辑递归完全二叉树逻辑平衡二叉树题外话递归二叉树的所有路径思路递归相同的树100. 相同的树另一棵树的子树左叶子之和思路找树左下角的值思路112. 路径总和思路106. 从中序与后序遍历序列构造二叉树根据…

FLASH:一种高效的Transformer设计

背景 近年来,Transformer凭借其优秀的设计,在文本、图像、语音等方向大杀四方。但是由于其attention的二次复杂度限制了其在长序列上的应用。本文提出了一种快(速度快)、省(省显存)的模型FLASH(Fast Linear Attention with a Single Head),在…

SpringBoot 和 Vue前后端分离在线工具项目实战,源码+超详细讲解

一、前言 主要通过SpringBoot和Vue来实现一个前后端分离的在线工具平台,包含PDF转换、图片处理、文本处理、图表展示、二维码工具等功能。 为了更直观展示项目效果,也给大家提供了在线体验地址:http://49.234.28.149, 源码资源见文末。 通过…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 无效的绑定语句(未找到),就是写的sql 方法找不到sql。解决: 1 namespace 指向是否正确 路径与引用的方法的路径保持一致a.namespace 没有指向Dao b. id ,方法名没有对应上2 引用的方法…