RocketMQ读写分离实战

news2025/1/16 8:02:44

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

继上次分析RocketMQ线上各种system busy

比较合理能提升性能和缓解system busy的方法就是修改broker的配置为transientStorePoolEnable = true

今天我们就来实战下

RocketMQ读写分离

RocketMQ实现了内存级别的读写分离。

想要开启很简单,我们在broker的配置文件中添加如下配置

transientStorePoolEnable = true

默认是关闭的

开启后需要注意transientStorePoolSize的大小,默认是5,mappedFileSizeCommitLog大小默认是1G

private int mappedFileSizeCommitLog = 1024 * 1024 * 1024;

所以如果我们要开启transientStorePoolEnable,然后其他的不配置的话,我们至少需要预留5g的堆外内存给RocketMQ使用

比如我们机器是16G,那么JVM的大小最多能给的是16- 5 = 11 G,实际netty也是使用堆外内存传输的,所以实际最多给到的JVM内存大小可能是8-9G

实现原理

开启 TransientStorePool 后,消息写入时将写入ByteBuffer.allocateDirect 申请的堆外内存中,由异步刷盘线程写入 fileChannel 中(Page Cache),最后进行进行刷盘。消息读取时,只会从 Page Cache 读取

所以如果消息未刷盘到Page Cache,broker宕机了,消息就会丢失。

优缺点

优点:

  • 主要是性能的提升:写数据是完全写内存,速度相较于写Page Cache更快,读写分离,降低锁的占用。

缺点:

  • 主要是broker宕机,内存中的消息没有刷盘到Page Cache消息会丢失。其次是消耗更多的内存

实战

本次我们将使用RocketMQ的基准测试脚本分别测试开启读写分离和不开启读写分离的性能。

jvm参数

-server -Xms8g -Xmx8g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages
  • broker机器配置

4核16G

压测脚本

主要是官方提供的基准测试脚本

  • 生产者启动参数
JAVA_HOME=/usr sh producer.sh -n 192.168.1.1:9876 -t xiazou-topic -s 3072
  • 消费者启动参数
JAVA_HOME=/usr sh consumer.sh -n 192.168.1.1:9876 -t xiazou-topic -g gid_xiaozou

压测方式,一个机器同时执行两个脚本,进行生产和消费

不开启读写分离

机器内存使用在8G左右

  • 生产
benchmark git:(master) topic: xiazou-topic, threadCount: 64, messageSize: 3072, keyEnable: false, propertySize: 0, tagCount: 0, traceEnable: false, aclEnable: false, messageQuantity: 0, delayEnable: false, delayLevel: 1, asyncEnable: false
Current Time: 2023-10-17 11:59:31,297 | Send TPS: 35634 | Max RT(ms): 421 | Average RT(ms):   1.796 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 11:59:41,297 | Send TPS: 39868 | Max RT(ms): 421 | Average RT(ms):   1.605 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 11:59:51,297 | Send TPS: 37434 | Max RT(ms): 421 | Average RT(ms):   1.709 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 12:00:01,297 | Send TPS: 26596 | Max RT(ms): 421 | Average RT(ms):   2.407 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 12:00:11,297 | Send TPS: 35836 | Max RT(ms): 421 | Average RT(ms):   1.786 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 12:00:21,297 | Send TPS: 36223 | Max RT(ms): 421 | Average RT(ms):   1.767 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 12:00:31,297 | Send TPS: 35910 | Max RT(ms): 421 | Average RT(ms):   1.782 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 12:00:41,297 | Send TPS: 34397 | Max RT(ms): 421 | Average RT(ms):   1.860 | Send Failed: 0 | Response Failed: 0
  • 消费
➜  benchmark git:(master) topic: xiazou-topic, threadCount 20, group: gid_xiaozou, suffix: false, filterType: null, expression: null, msgTraceEnable: false, aclEnable: false
Consumer Started.
Current Time: 2023-10-17 11:59:31,297 | Consume TPS: 35822 | AVG(B2C) RT(ms): 2.776 | AVG(S2C) RT(ms): 2.536 | MAX(B2C) RT(ms): 25 | MAX(S2C) RT(ms): 25 | Consume Fail: 0
Current Time: 2023-10-17 11:59:41,297 | Consume TPS: 36315 | AVG(B2C) RT(ms):  2.741 | AVG(S2C) RT(ms):  2.505 | MAX(B2C) RT(ms): 32 | MAX(S2C) RT(ms): 32 | Consume Fail: 0
Current Time: 2023-10-17 11:59:51,297 | Consume TPS: 36315 | AVG(B2C) RT(ms):  2.680 | AVG(S2C) RT(ms):  2.449 | MAX(B2C) RT(ms): 43 | MAX(S2C) RT(ms): 30 | Consume Fail: 0

生产和消费消息QPS在3.5w左右

开启读写分析

机器内存使用在12G左右

  • 生产
benchmark git:(master) topic: xiazou-topic, threadCount: 64, messageSize: 3072, keyEnable: false, propertySize: 0, tagCount: 0, traceEnable: false, aclEnable: false, messageQuantity: 0, delayEnable: false, delayLevel: 1, asyncEnable: false
Current Time: 2023-10-17 13:59:31,297 | Send TPS: 27799 | Max RT(ms): 163 | Average RT(ms):   2.302 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 13:59:41,297 | Send TPS: 34444 | Max RT(ms): 163 | Average RT(ms):   1.858 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 13:59:51,297 | Send TPS: 37879 | Max RT(ms): 163 | Average RT(ms):   1.689 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:01,297 | Send TPS: 37457 | Max RT(ms): 163 | Average RT(ms):   1.709 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:11,297 | Send TPS: 35222 | Max RT(ms): 163 | Average RT(ms):   1.818 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:21,297 | Send TPS: 41495 | Max RT(ms): 163 | Average RT(ms):   1.542 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:31,297 | Send TPS: 41249 | Max RT(ms): 163 | Average RT(ms):   1.550 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:41,297 | Send TPS: 41962 | Max RT(ms): 163 | Average RT(ms):   1.525 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:00:51,297 | Send TPS: 39707 | Max RT(ms): 523 | Average RT(ms):   1.612 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:01:01,297 | Send TPS: 43444 | Max RT(ms): 523 | Average RT(ms):   1.473 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:01:11,297 | Send TPS: 42391 | Max RT(ms): 523 | Average RT(ms):   1.510 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:01:21,297 | Send TPS: 41915 | Max RT(ms): 523 | Average RT(ms):   1.527 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:01:31,297 | Send TPS: 42221 | Max RT(ms): 523 | Average RT(ms):   1.516 | Send Failed: 0 | Response Failed: 0
Current Time: 2023-10-17 14:01:41,297 | Send TPS: 42480 | Max RT(ms): 523 | Average RT(ms):   1.506 | Send Failed: 0 | Response Failed: 0
  • 消费
➜  benchmark git:(master) topic: xiazou-topic, threadCount 20, group: gid_xiaozou, suffix: false, filterType: null, expression: null, msgTraceEnable: false, aclEnable: false
Consumer Started.
Current Time: 2023-10-17 13:59:36,467 | Consume TPS: 45646 | AVG(B2C) RT(ms): 2135.170 | AVG(S2C) RT(ms): 2135.517 | MAX(B2C) RT(ms): 6164 | MAX(S2C) RT(ms): 6160 | Consume Fail: 0
Current Time: 2023-10-17 13:59:46,467 | Consume TPS: 38940 | AVG(B2C) RT(ms):  60.442 | AVG(S2C) RT(ms):  61.163 | MAX(B2C) RT(ms): 239 | MAX(S2C) RT(ms): 240 | Consume Fail: 0
Current Time: 2023-10-17 13:59:56,467 | Consume TPS: 38094 | AVG(B2C) RT(ms):  39.721 | AVG(S2C) RT(ms):  40.450 | MAX(B2C) RT(ms): 239 | MAX(S2C) RT(ms): 239 | Consume Fail: 0
Current Time: 2023-10-17 14:00:06,467 | Consume TPS: 33780 | AVG(B2C) RT(ms):  52.946 | AVG(S2C) RT(ms):  53.575 | MAX(B2C) RT(ms): 285 | MAX(S2C) RT(ms): 286 | Consume Fail: 0
Current Time: 2023-10-17 14:00:16,467 | Consume TPS: 40338 | AVG(B2C) RT(ms):  48.543 | AVG(S2C) RT(ms):  49.286 | MAX(B2C) RT(ms): 248 | MAX(S2C) RT(ms): 248 | Consume Fail: 0
Current Time: 2023-10-17 14:00:26,467 | Consume TPS: 41998 | AVG(B2C) RT(ms):  66.248 | AVG(S2C) RT(ms):  67.008 | MAX(B2C) RT(ms): 238 | MAX(S2C) RT(ms): 238 | Consume Fail: 0
Current Time: 2023-10-17 14:00:36,467 | Consume TPS: 41713 | AVG(B2C) RT(ms):  72.638 | AVG(S2C) RT(ms):  73.397 | MAX(B2C) RT(ms): 231 | MAX(S2C) RT(ms): 232 | Consume Fail: 0
Current Time: 2023-10-17 14:00:46,467 | Consume TPS: 39853 | AVG(B2C) RT(ms):  53.383 | AVG(S2C) RT(ms):  54.047 | MAX(B2C) RT(ms): 524 | MAX(S2C) RT(ms): 234 | Consume Fail: 0
Current Time: 2023-10-17 14:00:56,467 | Consume TPS: 42399 | AVG(B2C) RT(ms):  59.808 | AVG(S2C) RT(ms):  60.542 | MAX(B2C) RT(ms): 242 | MAX(S2C) RT(ms): 243 | Consume Fail: 0
Current Time: 2023-10-17 14:01:06,467 | Consume TPS: 43756 | AVG(B2C) RT(ms):  75.232 | AVG(S2C) RT(ms):  75.986 | MAX(B2C) RT(ms): 252 | MAX(S2C) RT(ms): 253 | Consume Fail: 0
Current Time: 2023-10-17 14:01:16,467 | Consume TPS: 42434 | AVG(B2C) RT(ms):  57.688 | AVG(S2C) RT(ms):  58.413 | MAX(B2C) RT(ms): 245 | MAX(S2C) RT(ms): 245 | Consume Fail: 0
Current Time: 2023-10-17 14:01:26,467 | Consume TPS: 42152 | AVG(B2C) RT(ms):  69.523 | AVG(S2C) RT(ms):  70.260 | MAX(B2C) RT(ms): 237 | MAX(S2C) RT(ms): 237 | Consume Fail: 0
Current Time: 2023-10-17 14:01:36,467 | Consume TPS: 42024 | AVG(B2C) RT(ms):  53.667 | AVG(S2C) RT(ms):  54.385 | MAX(B2C) RT(ms): 246 | MAX(S2C) RT(ms): 246 | Consume Fail: 0
Current Time: 2023-10-17 14:01:46,467 | Consume TPS: 41974 | AVG(B2C) RT(ms):  71.306 | AVG(S2C) RT(ms):  72.068 | MAX(B2C) RT(ms): 250 | MAX(S2C) RT(ms): 251 | Consume Fail: 0

生产和消费消息QPS在4w左右,相比不开启读写分离QPS生产和消费提高了5000QPS(大概提升了15%的性能),但是RT变长了(每条平均耗时)

总结

总的来说开启读写分离有明显的QPS性能提升,但是会耗费额外的内存,但是每条消息的平均耗时变高了

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

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

相关文章

慎投!包含Hindawi旗下2本,5本Scopus期刊被剔除!(附9月更新下载)

2023年9月Scopus期刊目录更新 Scopus官网近日更新了9月期刊目录,此次更新与上次(2023年8月)相比,有5本期刊不再被收录,详情如下: / Scopus期刊目录说明 / • SCOPUS 和 SCI 的相同点: 简单来说…

客户管理系统是如何提高工作效率的?

对于大部分企业来说销售部门相比市场营销等部门,会投入更大的人力、物力,客户管理系统在其中发挥着重要作用,它是如何提高工作效率的。 在数字化高度发达的今天,销售自动化已经步入了企业的经营管理中,大大地改善了销…

Spring Cloud Gateway集成Swagger实现微服务接口文档统一管理及登录访问

简介 本文将介绍如何在Spring Cloud微服务中使用Swagger网关来统一管理所有微服务的接口文档,并通过Spring Security实现登录后才能访问Swagger文档,以确保接口数据的安全访问。 在开始之前,需要假设你已经完成了Spring Cloud Gateway的相关…

触控笔哪个牌子好用?主动电容笔和被动电容笔的区别

主动式电容笔和被动式电容笔两者最大的不同之处在于主动式电容笔的应用范围更大,可以兼容各种不同的电容屏幕。随着人们对其认识的不断深入,其应用范围也在不断扩大。而且国产的主动式电容笔,也在不断的更新换代,重力越来越多&…

【工具】SecureCR-8.5下载、安装激活和使用教程

起初我参考的文章:【工具】SecureCR-8.5下载、安装激活和使用教程(包含常用设置)_securecrt激活_SecureCode的博客-CSDN博客 但是不行啊,执行到13步的时候报错: 问了作者也没有回应,直到我参考了&#xff…

动手实现H5仿原生app前进后退切换效果

动手实现H5仿原生app前进后退切换效果 前言 最近在优化H5页面&#xff0c;我注意到当开发完成的移动端H5页面嵌入到微信小程序或者原生app中时&#xff0c;当触发页面路由切换会与原生app看上去有点格格不入&#xff0c;因为H5页面<router-view>切换路由时是直接替换了…

vue3点击表格某个单元格文本就切换成输入框,其他单元格不变化

<el-table :data"data.tableData" height"60vh" border scrollbar-aways-on><el-table-column label"序号" type"index" width"80" fixed /><el-table-column label"操作" width"120" f…

Linux知识点 -- 高级IO(二)

Linux知识点 – 高级IO&#xff08;二&#xff09; 文章目录 Linux知识点 -- 高级IO&#xff08;二&#xff09;一、IO多路转接 -- poll1.poll接口2.poll实现3.poll优缺点 二、IO多路转接 -- epoll1.epoll接口2.epoll的工作原理3.epoll服务器实现4.epoll的优点5.epoll的工作模式…

在线加解密(支持SM2、SM3、SM4)

https://the-x.cn/zh-cn/cryptography/Sm4.aspx

SAS国际认证考试报名流程

文章目录 注册SAS账号登录SAS账号预约考试考试注意事项 注册SAS账号 SAS考试报名入口&#xff1a;https://home.pearsonvue.com/sas 注册SAS账号 邮箱验证 点击上述邮件发送来的链接&#xff0c;跳转到如下界面。输入密码即可。 完成注册。选择login。 登录SAS账号 输入Email …

MongoDB 未授权访问漏洞

简介 MongoDB是一个基于分布式文件存储的数据库&#xff0c;是一个介于关系数据库和非关系数据库之间的产品&#xff0c;它的特点是高性能、易部署、易使用&#xff0c;存储数据非常方便&#xff0c;默认情况下是没有认证的这就导致不熟悉它的研发人员部署后没有做访问控制导致…

NAND存储器转储分析 - 使用ECC修复位错误与UBI镜像固件分析

一、 简介 这篇研究论文将通过黑客的视角&#xff0c;详细阐述如何操作 NAND dump 以及如何获取 dump 文件中的所有文件。每一步骤以及所使用的方法均会细致解析&#xff0c;并配以实例说明。本文主要关注的是物理 NAND dump&#xff0c;这是从通用编程器中提取出的 dump 文件…

重磅!中科院1区TOP被踢?共7本被剔除!10月SCIE/SSCI期刊目录更新!

期刊动态&#xff1a;2023年10月SCI、SSCI期刊目录更新 2023年10月17日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次9月WOS期刊目录剔除7本SCIE&SSCI期刊之后&#xff0c;此次10月更新又有7本期刊发生变动&#xff0c;其中有5本SCIE期刊&#xff0c;1本SSCI期…

软键盘怎么打开?3招快速打开!

“我的键盘好像出现了一些问题&#xff0c;现在没法输入文字。听说电脑上有个工具叫软键盘&#xff0c;我想暂时先用这个来代替键盘。有什么方法可以把它打开的吗&#xff1f;” 软键盘是一个虚拟键盘&#xff0c;它不是物理键盘&#xff0c;而是出现在计算机屏幕上的可视化输入…

java的注解接口Target

java.lang.annotation.Target是Java中预定义的一个注解接口&#xff0c;用在注解接口的声明上&#xff0c;指明注解接口适用的上下文。 Target注解接口只有一个元素value&#xff0c;该元素的类型是java.lang.annotation.ElementType的数组&#xff0c;其中ElementType是一个枚…

vue使用pdf 导出当前页面,(jspdf, html2canvas )

需要安装两个插件 npm install html2canvas jspdfyarn add html2canvas jspdf<div class"app-container" id"pdfPage">我是内容 </div><el-button size"mini" click"onExportPdf">导出数据</el-button>onexp…

SAP MM物料移动取总账科目逻辑,debug 标准bapi BAPI_GOODSMVT_CREATE

debug 标准bapi BAPI_GOODSMVT_CREATE perform mb_create_goods_movement function MB_CREATE_GOODS_MOVEMENT function MB_CREATE_MATERIAL_DOCUMENT perform buchen_aufbereiten perform F-SEGMENTE_GENERIEREN perform f-segmente_erstellen perform f-segmente_erzeugen p…

C语言参悟-函数

C语言参悟-函数 一、概述二、函数1. 函数的构成2. 函数参数3. 函数名4. 函数返回值5. 函数的工作1. 程序栈2、栈帧的组织 三、函数递归四、函数指针 一、概述 首先&#xff0c;什么是函数&#xff1f;函数&#xff08;function&#xff09;是完成特定任务的独立程序代码单元。…

五金仓库管理员的工作内容

近几年来&#xff0c;很多企业会发现&#xff0c;经营增长的压力越来越大&#xff0c;主要原因包括外部局势的巨变&#xff0c;市场捉摸不定&#xff1b;企业之间竞争越来越剧烈&#xff0c;企业的利润空间不断被压缩&#xff1b;员工越来越个性化、多元化&#xff0c;管理困难…

文档外发控制与安全:实现高效协作与数据安全的关键

随着企业数据量的不断增加&#xff0c;文档外发成为了一个不可避免的需求。然而&#xff0c;很多企业在文档外发过程中存在着很多问题&#xff0c;如数据泄露、信息误用等。因此&#xff0c;如何保证文档外发的安全性和高效性成为了企业亟待解决的问题。飞驰云联Ftrans的文件收…