Kafka vs RocketMQ——多Topic对性能稳定性的影响
引言
上期我们对比了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性能曲线对比
测试结论
- Topic数的增加对RocketMQ无影响,长时间运行服务非常稳定。
- 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和RocketMQ的对战并没有停止,更多的场景对比还在后面,敬请期待后续的比拼!
本文转自:http://jm.taobao.org/2016/04/20/kafka-vs-rocketmq-3/
Kafka vs RocketMQ——多Topic对性能稳定性的影响的更多相关文章
- Kafka vs RocketMQ——多Topic对性能稳定性的影响-转自阿里中间件
引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...
- Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件
引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...
- Kafka vs RocketMQ—— Topic数量对单机性能的影响
引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...
- Kafka vs RocketMQ——单机系统可靠性-转自阿里中间件
引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准--软件可靠性. 何为"可靠性"? 先看下面这种情况:有A,B两辆越野汽 ...
- Kafka vs RocketMQ——单机系统可靠性
引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性. 何为“可靠性”? 先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区 ...
- RabbitMQ、Kafka、RocketMQ的优劣势
今天我们一起来探讨: 全量的消息队列究竟有哪些? Kafka.RocketMQ.RabbitMQ的优劣势比较 以及消息队列的选型 最全MQ消息队列有哪些 那么目前在业界有哪些比较知名的消息引擎呢?如下 ...
- Kafka和RocketMQ底层存储之那些你不知道的事
大家好,我是yes. 我们都知道 RocketMQ 和 Kafka 消息都是存在磁盘中的,那为什么消息存磁盘读写还可以这么快?有没有做了什么优化?都是存磁盘它们两者的实现之间有什么区别么?各自有什么优 ...
- 30分钟带你了解「消息中间件」Kafka、RocketMQ
消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...
- kafka对比RocketMQ(转)
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...
随机推荐
- dubbo 学习(5) dubbo多协议和多注册中心
转载 http://blog.csdn.net/songjinbin/article/details/49498431 一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和N ...
- WCF Service中HttpContext.Current为null的解决办法
1. 在hosting WCF的web.config中加入: <system.serviceModel> <serviceHostingEnvironment aspNetCompa ...
- 【MySQL】mysql在Windows下使用mysqldump命令备份数据库
在cmd窗口中使用mysqldump命令首先需要配置环境变量 1,在计算机中找到MySQL的安装位置,找到MySQL Workbench,比如我的是C:\Program Files\MySQL\MyS ...
- JavaScript三种方式改变标签css
原文地址:https://www.cnblogs.com/xiangru0921/p/6514225.html <body> <div id="div">这 ...
- 【C语言】练习2-8
题目来源:<The C programming language>中的习题P38 练习2-1: 编写一个函数rightrot(x,n),该函数返回将x循环右移(即从最右端移除的位将从 ...
- Spark弹性分布式数据集RDD
RDD(Resilient Distributed Dataset)是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心 ...
- TextView中显示链接 定义颜色
<TextView android:id="@+id/textView" android:layout_width="match_parent" andr ...
- 启用跨源请求 (CORS)
https://docs.microsoft.com/zh-cn/aspnet/core/security/cors
- x电容和Y电容
https://wenku.baidu.com/view/c0a68a6a4a7302768e9939bd.html 根據 IEC 60384-14, 電容器分為 X 電容及 Y 電容 , 1. X ...
- Internet上的WWW服务与HTTP协议(非常非常不错的文档,推荐订阅)
Internet上的WWW服务与HTTP协议 兼容性----H1TP/1.1与HTTP/1.0后向兼容;运行1.1版本的web服务器可以与运行1.0版本的浏览器“对话”,运行1.1版本的浏览器也可以与 ...