关于RocketMQ Producer某个性能优化点的分析

简介: 关于RocketMQ Producer某个性能优化点的分析

背景介绍

在上一篇文章【一次RocketMQ ons Bug导致消息不断堆积到重试队列的案例分析】,我们有提到为了优化Producer性能问题对Pandora进行了升级,升级后出现了问题。下面我们对Producer的这个优化点进行下分析记录。

问题描述

SLB(LVS+TEngine)在云平台的重要性不言而喻,随着应用规模不断增大,LVS节点单核CPU使用率有达到70%的情况,经过排查发现LVS集群CPS(每秒新建连接数)实际水位已经达到了逻辑容量的2倍以上,而其中MQ Broker VIP实例的CPS占比超过了80%,即MQ客户端存在大量的短连接。

分析过程

MQ Producer到MQ Broker的流量链路

MQ Broker通过SLB将VIP暴露出去(即ECS访问Broker需要经过SLB),下面简单了解下VPC物理网络及ECS与SLB之间的拓扑链路。

VPC物理网络示意图

SLB在图的右侧,向上联接LSW;

ECS在图的左下侧,是运行在宿主机NC上的虚拟机,宿主机NC向上联接ASW。

同机房ECS到SLB网络链路拓扑示意图

左边是运行在宿主机NC上的ECS,右边是SLB集群。

从ECS访问SLB的链路大致需要经过ASW、PSW、DSW、MC及LSW。

Producer init

为了便于表达和理解,我们只关注与该问题有关的部分逻辑。

  1. 第一步初始化DefaultMQProducer(继承了ClientConfig)实例四个字段(定义在ClientConfig中),由于ons sdk没有为这四个字段提供修改的接口,四个字段运行时的值就是图上的默认值;
  2. 第二步初始化DefaultMQProducerImpl实例(其中一个入参是DefaultMQProducer实例)
  3. 第三步初始化MQFaultStrategy,代码如图:
  4. 第四步初始化MQFaultStrategy实例字段:startDetectorEnable=true,sendLatencyFaultEnable=true
  5. 第五步初始化MQFaultStrategy实例属性latencyFaultTolerance,设置latencyFaultTolerance属性值:latencyFaultTolerance.detectTimeout=200,latencyFaultTolerance.detectInterval=2000
  6. 第六步初始化latencyFaultTolerance实例线程池属性,用于后面探活

arthas vmtool

查看运行时四个字段的值:

Producer start

为了便于表达和理解,我们只关注与该问题有关的部分逻辑。

  1. 第一步梦想开始的地方
  2. 第二步默认startDetectorEnable=true,启动探活!
  3. 第三步默认sendLatencyFaultEnable=true、startDetectorEnable=true
  4. 第四步启动定时探活线程

Producer detect

为了便于表达和理解,我们只关注与该问题有关的部分逻辑。

arthas watch

总结

当一个服务调用另外一个服务的时候,总是会出现各种各样的状况,合适的容错机制是系统稳定性的重要保障。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 负载均衡 Java
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息消费长轮训机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息消费长轮训机制体系的原理分析
98 0
|
3月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
221 2
|
5月前
|
消息中间件 网络协议 RocketMQ
消息队列 MQ产品使用合集之broker开启proxy,启动之后producer生产消息始终都只到一个broker,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
3月前
|
消息中间件 存储 数据中心
RocketMQ的长轮询(Long Polling)实现分析
文章深入分析了RocketMQ的长轮询实现机制,长轮询结合了推送(push)和拉取(pull)两种消息消费模式的优点,通过客户端和服务端的配合,确保了消息的实时性同时将主动权保留在客户端。文中首先解释了长轮询的基本概念和实现步骤,然后通过一个简单的实例模拟了长轮询的过程,最后详细介绍了RocketMQ中DefaultMQPushConsumer的长轮询实现方式,包括PullMessage服务、PullMessageProcessor服务和PullCallback回调的工作原理。
115 1
|
3月前
|
消息中间件 Arthas Java
RocketMQ—一次连接namesvr失败的案例分析
项目组在使用RocketMQ时遇到Consumer连接Name Server失败的问题,异常显示连接特定地址失败。通过Arthas工具逐步分析代码执行路径,定位到创建Channel返回空值导致异常。进一步跟踪发现,问题源于Netty组件在初始化`ByteBufAllocator`时出现错误。分析依赖后确认存在Netty版本冲突。解决方法为排除冲突的Netty包,仅保留兼容版本。
229 0
RocketMQ—一次连接namesvr失败的案例分析
|
6月前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
89 0
|
5月前
|
数据采集 监控 物联网
MQTT协议在智能制造中的应用案例与效益分析
【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
156 1
|
6月前
|
消息中间件 存储 Apache
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。
635 2
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
|
6月前
|
消息中间件 Oracle Java
【RocketMq】Broker 启动脚本分析
【RocketMq】Broker 启动脚本分析
104 0
|
6月前
|
消息中间件 缓存 Java
【RocketMq】NameServ启动脚本分析(Ver4.9.4)
【RocketMq】NameServ启动脚本分析(Ver4.9.4)
151 0

相关产品

  • 云消息队列 MQ