引言

上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至0.85万,导致无法完成测试。我们不禁要问:

为什么看不到Kafka性能暴跌的趋势呢?

今天的测试,就来排查一下这个问题,然后验证一下两个系统对外服务的稳定性。本次测试,要引入“稳定性测试”这个概念,那什么是稳定性测试呢?我们先来看一下定义:

稳定性测试:测试系统的长期稳定运行能力。在系统运行过程中,对系统施压,观察系统的各种性能指标以及服务器的负载指标。

好像有点抽象,我们还是看一个例子吧。

下面的测试对比图,是用来评测汗血宝马和蒸汽机车谁快的一组竞速曲线:

图1 汗血宝马和蒸汽火车的速度稳定性对比

上图的横轴表示测试时间,纵轴表示火车和马的速度,可以看到,马的加速和最高速度均好于火车。但是由于体力原因,15分钟后,马就很难维持最高速度,只能稍作休息再加速,直至体力耗尽;而火车全程达到最高速度就基本不会变了。所以结论很明显,火车的速度稳定性优于汗血宝马。

假想一下:如果测试时间只取15分钟会得到什么结论呢?汗血宝马无论是加速,还是最高速度,乃至单位时间内通过的路程均完胜火车。所以如果是要对长途运输做一个评测的话,那么正确的测试方式是——拉长测试时间,以观察被测对象的稳定性。

OK,再次回到我们上次测试留下的疑问——暴跌无趋势。其原因很可能是,在早期的32Topic,64Topic时,Kafka就已经出现了下跌的趋势,只是我们压测的时间不够,算作测试通过了。

本期测试,我们沿用上一期的测试方式,唯一不同的就是把压测时间从15分钟拉长到1小时,看看在较长的压力时间内,Kafka和RocketMQ哪一个产品对外服务更稳定。

测试目的

消息收发端共存的情况下,RocketMQ和Kafka各运行约1个小时,观察不同Topic数量时,Kafka、RocketMQ性能指标(TPS&响应时间)的波动性。

测试场景

默认每个Topic的分区数为8,每个Topic对应一个订阅者,逐步增加Topic的数量,这里性能是否抖动根据趋势图做直观的判断,数据如下:

做完全部的测试场景后会发现,正如之前的猜测,Kafka在32和64个Topic时,就已经出现了不稳定的情况。下面看一下32和64个Topic的详细数据,如下图所示:

图2. 32个Topic性能曲线对比

蓝色Kafka的TPS曲线在18分钟以后,就开始上下波动,毫无规律,而RocketMQ则表现稳定。下面再看64个Topic的情况,如下图所示:

图3. 64个Topic性能曲线对比

图4. 64个Topic客户端发送响应时间对比

Kafka的TPS在前20分钟保持稳定,并大幅度领先RocketMQ。20分钟后又开始出现不规则波动,这些波动直接导致响应时间的变化(图4),某个时刻Kafka的客户端响应时间会达到25毫秒,而RocketMQ全程都是5毫秒。
这次的对比3个场景中, Kafka胜出一个,就是8个Topic的场景,如图5所示,由于Topic个数和分区数的限制,导致Kafka只适合小规模的业务系统。

图5. 8个Topic性能曲线对比

测试结论

  1. Topic数的增加对RocketMQ无影响,长时间运行服务非常稳定。
  2. Kafka 的Topic数量建议不要超过8个。8个以上的Topic会导致Kafka响应时间的剧烈波动,造成部分客户端的响应时间过长,影响客户端投递的实时性以及客户端的业务吞吐量。

附录

测试环境

服务端为单机部署,机器配置如下:

CPU 24核
内存 94G
硬盘 Seagate Constellation ES (SATA 6Gb/s) 2.00 TB 7202 rpm
网卡 1000Mb/s

应用版本:

消息中间件 版本
Kafka 0.8.2
RocketMQ 3.4.8

测试脚本:

压力端 Jmeter的java客户端
消息大小 128 字节
并发数 能达到服务端最大TPS的最优并发
Topic分区数量 8
刷盘策略 异步落盘

未完待续

经过本期的测试,RocketMQ在稳定性上也是完胜Kafka,如果只是小规模的业务,Kafka可以满足需求,但要是对业务的复杂度和稳定性有更高的要求,RocketMQ则是更好的选择。

Kafka vs RocketMQ——多Topic对性能稳定性的影响-转自阿里中间件的更多相关文章

  1. Kafka vs RocketMQ——多Topic对性能稳定性的影响

    引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...

  2. Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件

    引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...

  3. 【Apache RocketMQ】RocketMQ捐赠给Apache那些鲜为人知的故事-转自阿里中间件

    序言 今年的双十一对阿里巴巴中间件消息团队来说,注定是个不平凡的日子.在这一天,稳定性小组重点攻克的低延迟存储解决方案成功地经受住了大考.整个大促期间,99.996%的延迟落在了10ms以内,极个别由 ...

  4. 阿里中间件RocketMQ

    阿里RocketMQ是怎样孵化成Apache顶级项目的? RocketMQ 迈入50万TPS消息俱乐部 Apache RocketMQ背后的设计思路与最佳实践 专访RocketMQ联合创始人:项目思路 ...

  5. Kafka vs RocketMQ—— Topic数量对单机性能的影响

    引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...

  6. Kafka vs RocketMQ——单机系统可靠性-转自阿里中间件

    引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准--软件可靠性. 何为"可靠性"? 先看下面这种情况:有A,B两辆越野汽 ...

  7. Kafka vs RocketMQ——单机系统可靠性

    引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性. 何为“可靠性”? 先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区 ...

  8. RabbitMQ、Kafka、RocketMQ的优劣势

    今天我们一起来探讨: 全量的消息队列究竟有哪些? Kafka.RocketMQ.RabbitMQ的优劣势比较 以及消息队列的选型 最全MQ消息队列有哪些 那么目前在业界有哪些比较知名的消息引擎呢?如下 ...

  9. Kafka和RocketMQ底层存储之那些你不知道的事

    大家好,我是yes. 我们都知道 RocketMQ 和 Kafka 消息都是存在磁盘中的,那为什么消息存磁盘读写还可以这么快?有没有做了什么优化?都是存磁盘它们两者的实现之间有什么区别么?各自有什么优 ...

随机推荐

  1. Python

    语法 #!/usr/bin/python 注释:# 编码:# -*- coding: UTF-8 -*- 缩进 运算符 算数运算符 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得 ...

  2. php如何防止图片盗用/盗链的两种方法(转)

    图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量.本文章向大家介绍php防止图片盗用/盗链的两种方法 Apache图片重定向方法 设置images目录不充许http访问 Apache服 ...

  3. ReportView报表开发记录(一)

    在公司开发,使用到ReportView技术,写下自己的经验. 1.在工具箱中找到 ReportViewer,ScriptManager放到test.aspx页面. 如果找不到报表项,请参考http:/ ...

  4. 耗时两月,NHibernate系列出炉

    写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总 ...

  5. Android之卫星菜单的实现

    卫星菜单是现在一个非常受欢迎的“控件”,很多Android程序员都趋之若鹜,预览如下图.传统的卫星菜单是用Animation实现的,需要大量的代码,而且算法极多,一不小心就要通宵Debug.本帖贴出用 ...

  6. jquery 自定义click事件执行多次

    用jquery绑定一个按钮click事件后,第一次点击后一切正常,第二次点击竟然执行两次,以后越来越多, 后来查看文档发现 jquery click 不是替换原有的function 而是接着添加,所以 ...

  7. 《jQuery判断radio、checkbox、select 是否选中和设置选中问题以及获取选中值》总结

    <form> <input type="radio" name="gender" id="man" value=" ...

  8. Linux学习之六--unZip/Zip的安装及使用

    Linux系统没有自带的压缩解压工具:需要我们自己安装:当用到zip或者unzip如果没有安装就会出现unzip: Command Not Found 或 zip: Command Not Found ...

  9. ip地址转换

    通常,我们用点分十进制字符串表示ipv4地址(192.168.1.1),用十六进制字符串表示ipv6地址(fe80::20c:29ff:fee9:4bcc). ipv4转换函数 #include &l ...

  10. QSS的应用

    1.在同一级别的widget中,如果指定widget有设置样式表,则在qss对该样式表的设置无效,对比验证: (StatusWidget未设置widget样式--运行截图) (StatusWidget ...