基于电商场景的高并发RocketMQ实战-Broker高并发消息写入、读写队列原理分析

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

Broker 如何实现高并发消息写入

Broker 对消息进行写磁盘是采用的 磁盘顺序写 ,写磁盘分为两种:顺序写和随机写,两种速度差别非常大!

Broker 通过顺序写磁盘,也就是在文件末尾不停追加内容,不需要进行寻址操作,大幅度 提高消息持久化存储的性能

这里消息写入的就是 Commitlog 文件!

磁盘顺序写和磁盘随机写的速度差距如下图:

在这里插入图片描述

在将消息写入 Commitlog 文件之后,会有一个后台线程去监听 Commitlog 是否有数据写入,如果有就将新写入的数据写入到 write queue 中,这里写到 queue 中数据的内容就是消息在 Commitlog 中的偏移量 offset,写入 Commitlog 文件动作如下图黑色部分:

在这里插入图片描述

总结:

那么这里的高并发就是通过两点来保证:

  1. 通过 磁盘顺序写 来提升性能
  2. 通过 异步 将 Commitlog 文件写入 write queue(也就是 consume queue)中,保证不影响主流程速度

RocketMQ 的读写队列原理分析

RocketMQ 中是区分了 write queue 和 read queue,在物理层面只有 write queue 才对应磁盘上的 consumeQueue 物理文件,而 read queue 是一个虚的概念,并不是一个 read queue 也新创建一个磁盘文件

这两个参数是在 Topic 下进行设置的:

  • writeQueueNums:表示生产者在发送消息时,可以向几个队列进行发送
  • readQueueNums:表示消费者在消费消息时,可以从多少个队列进行拉取

write queue 和 read queue 是一一对应的,如果 write queue 的数量多于 read queue,那么就会有一部分 write queue 中的消息永远不会被消费到;如果 read queue 的数量多于 write queue,那么就存在一部分 consumer 订阅的 read queue 中没有数据

设计 write queue 和 read queue 的意义:

使扩缩容的过程更加平滑,比如原来有 4 个 write queue 和 read queue,先将 write queue 缩容成 2 个,那么此时先不缩容读队列,等待与删除的两个读队列所对应的写队列中的旧数据被消费完毕之后,再对读队列进行缩容

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

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

相关文章

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

Vue3中的混入(mixins)

本文主要介绍Vue3中的混入(mixins)。 目录 一、在普通写法中使用混入:二、在setup写法中使用混入: 混入是Vue中一种用于在组件中共享可复用功能的特性。在Vue 3中,混入的使用方式有所改变。 一、在普通写法中使用混入…

【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等&…

Vue 在同一个项目中,判断pc端和移动端,显示不同风格的页面(附pc端移动端显示效果图)

实现思路 1、修改index.html页面的meta 2、增加pc端移动端的判断 3、设置路由&#xff0c;根据不同的端&#xff0c;调用各自的路由&#xff0c;显示不同的页面 index.html 修改如下 <meta name"viewport" content"widthdevice-width,initial-scale1.0,minim…

在线简历制作!这3个简历模板网站超好用

马上就要到一年一度的金九银十&#xff0c;找工作的季节啦。如何制作一份优质的简历&#xff0c;是每位找工作人都想探询的问题&#xff0c;如何才能让自己的简历脱颖而出&#xff0c;选择一个优质的简历制作网站十分重要&#xff0c;下面就来推荐3款超好用的在线简历制作网站&…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测分类效果基本描述程序设计参考…

Win10 使用 Nmap 扫描 Andorid 设备开放端口

Nmap Nmap 是 网络探测工具和安全/端口扫描器。 官网链接 Nmap参考指南(Man Page) 官网下载地址 Downloading Nmap Nmap 下载安装 到官网下载对应操作系统的安装包&#xff0c; 默认配置&#xff0c;一直下一步安装即可。安装过程中备份下安装路径&#xff0c;后续用到。…

python pip安装依赖的常用软件源

目录 引言 一、什么是镜像源&#xff1f;​​​​​​​ 二、清华源 三、阿里源 四、中科大源 五、豆瓣源 六、更多资源 引言 在软件开发和使用过程中&#xff0c;我们经常需要下载和更新各种软件包和库文件。然而&#xff0c;由于网络环境的限制或者服务器的负载&#…

Netty Review - Netty自动重连机制揭秘:原理与最佳实践

文章目录 概述Pre客户端自动重连CodeServerClient (重点) 测试启动自动重连运行过程中断链后的自动重连 概述 Pre Netty Review - 深入探讨Netty的心跳检测机制&#xff1a;原理、实战、IdleStateHandler源码分析 客户端自动重连 自动重连是一个用于提高网络应用稳定性和可靠…

Java 第16章 坦克大战1-2 思路整理

文章目录 1 绘制坦克坦克画板Panel画框Frame 2 让坦克动起来画板Panel 3 本章作业 1 绘制坦克 坦克 不同坦克有共同属性&#xff0c;可以先提取共同特征&#xff08;坐标位置&#xff09;作为父类&#xff0c;然后其他坦克类继承它。 画板Panel 有坦克在画板上显示&#xf…

Openai的openai新版本调用方式

最近大家有没有发现Openai的openai已经更新到1.6.1了,而且API的调用方式发生了巨大的变化,下面来看看openai新的调用方式吧。 欢迎关注公众号 module ‘openai’ has no attribute ChatCompletion. 提示openai的版本过低。(pip install -U openai) 1. Chat API from openai…

4.7 【共享源】流的生产者(二)

七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…