前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rocketmq-2:性能测试方案&压测&选型&结论

rocketmq-2:性能测试方案&压测&选型&结论

作者头像
千里行走
发布2019-07-03 17:57:01
5.2K1
发布2019-07-03 17:57:01
举报
文章被收录于专栏:千里行走

(1).性能测试方案

1.理想测试方案

关注qps和lantency即可,消息丢失需要使用者在开发时处理,比如消息发送加重试机制(这里有讲究,也不是随便写的,也涉及到rocketmq-broker的流控机制,下一篇聊)。

但实际上,不可能这样操作,原因:机器资源占用太多,最主要的是时间不允许。

2.实际测试方案&测试结果

(2).测试机型&资源分配

全部使用阿里云的ecs.sn1ne.xlarge机型,都是4core8G,相对来说性价比最高,网络有加强,内核参数有优化,如下:

使用rocketmq默认提供的benchmark脚本工具进行压测。

topic:BenchmarkTest

queue:1024/broker

(3).相关监测数据

以测试用例BT-P&C-MSG-SIZE1024-2brokerMaster-2BrokerSlaves-0003-1为例:

2个brokerMaster, 2个brokerSlave,且broker配置为:

brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH

1.整体概览

施压机消息发送情况:

消费者消费情况:

broker-master-1节点的iostat:

broker-slave-1节点的iostat:

2.broker-master-1节点监控数据

3.broker-slave-1节点监控数据

4.consumer1节点监控数据

5.施压机(producer)监控数据

(4).最终选型

机器选型:

磁盘选型:

这里有一个问题:实际上不需要这么大的盘,100GB的SSD足够用了,后续会替换为100GB的SSD,成本更划算,而且TPS和lantency会更加漂亮;消息发送的重试次数会大幅减少。

附,官方关于资源的分布反馈:

(5).总结

1.不需要担心rocketmq的处理能力/TPS简单估算方法

关于TPS的计算很简单(async_master,async_flush):

在使用物理磁盘的前提下,max(broker-master单节点 TPS)=物理磁盘的最大写入速度/消息大小=max(rocketmq producer send TPS)

在使用SSD盘的前提下,max(broker-master单节点 TPS)=SSD盘的最大写入速度/消息大小=max(rocketmq producer send TPS)

我使用1KB的消息测试其实已经很大了,实际生产环境不会这么用,消息体都是尽可能小的。

2.不需要使用sync_master

会严重降低TPS,我的测试结果是直接降了一个数量级;而且也没有必要,除非是金融等高要求的场景必须保证副本,开启后多挂几组broker-master/slave,增加rocketmq的并行吞吐能力,提高TPS。

3.我们为什么选择async_master,async_flush

很简单,不是金融等高要求场景,而且这种模式下的可用性其实也是非常高的,更关注TPS,且同时关注成本。

但要注意前提是业务code要正确处理消息重试,消息重复消费,这个不是rocketmq保证的,以后会聊一聊这方面。

rocketmq的async_master和async_flush类似于kafka的acks,类似,不是完全等价。

4.我们需要让开发同学低成本的使用rocketmq

我们的做法是自己开发了一个框架,完全是注解是开发,将rocketmq的producer和consumer封装到框架里,配置都在apollo,开发同学使用时直接加几个注解即可完成producer,consumer的对象实例化,非常方便,不会出错。

而且还集成了prometheus,可以将producer和consumer的发送全程,消费全程监控起来,比如TPS过高时,会触发rocketmq的流控,直接将msg写入请求拒绝且不会重试,此时要在框架中自己实现重试机制,且加入prometheus监控:

直接监控到节点的进程,哪个JVM实例发生rocketmq使用异常一目了然。

prometheus其他监控:

目前暂时只开发了两个维度:消息发送全程监控(粒度到进程),消息堆积数监控(对于rocketmq集群,粒度到broker的queue;对于业务jvm,粒度到进程)。

非常有助于rocketmq的正确使用,和问题发现。

另:

官方也有一个rocketmq的prometheus-exporter(但是维度不全),也会使用:

https://github.com/apache/rocketmq-externals/tree/master/rocketmq-prometheus-exporter

5.以后也会将rocketmq容器化

放入K8S自带守护,正在进行中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档