【RocketMQ】开启DLedger高可用之后的坑:性能骤降30倍

2023-12-17 20:32

本文主要是介绍【RocketMQ】开启DLedger高可用之后的坑:性能骤降30倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做性能测试的时候发现,当集群开启了DLedger高可用之后,性能很差,TPS相差有30倍之多,详细过程记录如下:

集群信息
集群1:版本4.7.1,3Master,每个Master两个Slave,单Broker8G内存,异步复制,异步刷盘

集群2:所有配置一样,不同点是开启了DLedger

压测结果

使用相同参数进行压测:线程数:128,消息大小:128byte,压测结果对比如下:

集群1:

集群2:

可以看到,开启DLedger之后,性能骤降30倍,TPS只有3000+,有点懵,于是怀疑是否是集群2的配置错了,检查了一下集群2的Broker配置:

检查了配置,确定了是ASYNC_MASTER,但是从console看到的却不一样


可以看到运行时的Broker配置已经被改成了SYNC_MASTER的

于是带着疑问,看了一下代码

可以看到,LEADER角色的Broker,角色会被改成SYNC_MASTER

那为何会这样呢?

官方GitHub有两个issues:
https://github.com/apache/rocketmq/issues/2583

https://github.com/apache/rocketmq/issues/2278

大致的原因:开启DLedger之后,由于使用了Raft协议来保证集群的一致性,由于Raft主从复制的原理,和原来的Master/Slave模式的不一样,如果使用了Raft协议,主从复制是由Master发起,主动向每个从节点同步消息,而异步的方式是由从节点发起,向主节点上报offset,主节点再根据offset向从节点同步,所以开启了DLedger后,配置了ASNYC_MASTER会不生效,在最新的4.8.0中使用了Pipeline模式和批量复制,性能有所提升。

于是我重新搭建了个4.8.0的DLedger集群,压测结果如下:


单机TPS能达到1.4W+,性能确实提升不少,但是相比普通的Master/Slave模式,还是损失了一半左右的性能。

这篇关于【RocketMQ】开启DLedger高可用之后的坑:性能骤降30倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/505755

相关文章

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在