摘要: 这次,我们来模拟一个真实的场景: * 消息的发送和订阅一定是共存的 * 要支持多个订阅端订阅自己感兴趣的消息 我们将针对 RocketMQ 和 Kafka,对比在上述场景中,究竟谁更胜一筹。
阿里云消息队列测试小组 出品
上一期我们对比了三类消息产品(Kafka、RabbitMQ、RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务只有发送消息。本期,我们就来模拟一个真实的场景:
- 消息的发送和订阅一定是共存的
- 要支持多个订阅端订阅自己感兴趣的消息
本期我们将针对 RocketMQ 和 Kafka,对比在上述场景中,究竟谁更胜一筹。在正式开始测试之前,首先要向大家明确2个概念:
1. Topic为何物
Topic是消息中间件里一个重要的概念,每一个Topic代表了一类消息,有了多个Topic,就可以对消息进行归类与隔离。
可以参照下图的动物园喂食模型,每一种动物都只能消费相对应的食品。
2. 分区为何物
Kafka和RocketMQ都是磁盘消息队列的模式,对于同一个消费组,一个分区只支持一个消费线程来消费消息。过少的分区,会导致消费速度大大落后于消息的生产速度。所以在实际生产环境中,一个Topic会设置成多分区的模式,来支持多个消费者,参照下图:
在互联网企业的实际生产环境中,Topic数量和分区都会比较多,这就要求消息中间件在多Topic共存的时候,依然能够保证服务的稳定性。下面就进入测试环节,看看消息发送端,订阅端共存时,Kafka和RocketMQ对多Topic的处理能力。
测试目的
对比发送端、接收端共存情况下,Topic数量对Kafka、RocketMQ的性能影响,分区数采用8个分区。这次压测我们只关注服务端的性能指标,所以压测的退出标准是:
不断增加发送端的压力,直到系统吞吐量不再上升,而响应时间拉长。此时服务端出现性能瓶颈,获取相应的系统最佳吞吐量,整个过程中保证消息没有累积。
测试场景
默认每个Topic的分区数为8,每个Topic对应一个订阅者,逐步增加Topic数量。得到如下数据:
可以看到,不论Topic数量是多少,Kafka和RocketMQ均能保证发送端和消费端的TPS持平,就是说,保证了消息没有累积。
根据Topic数量的变化,画出二者的消息处理能力的对比曲线如下图:
从图上可以看出:
- Kafka在Topic数量由64增长到256时,吞吐量下降了 98.37% 。
- RocketMQ在Topic数量由64增长到256时,吞吐量只下降了 16% 。
为什么两个产品的表现如此悬殊呢?这是因为Kafka的每个Topic、每个分区都会对应一个物理文件。当Topic数量增加时,消息分散的落盘策略会导致磁盘IO竞争激烈成为瓶颈。而RocketMQ所有的消息是保存在同一个物理文件中的,Topic和分区数对RocketMQ也只是逻辑概念上的划分,所以Topic数量的增加对RocketMQ的性能不会造成太大的影响。
测试结论
在消息发送端,消费端共存的场景下,随着Topic数的增加Kafka吞吐量会急剧下降,而RocketMQ则表现稳定。因此Kafka适合Topic和消费端都比较少的业务场景,而RocketMQ更适合多Topic,多消费端的业务场景。
你知道阿里云消息队列(MQ)就是 Apache RocketMQ 的商业版吗?
经过上面的测试,RocketMQ几乎是完胜Kafka,其实这并不奇怪,因为RocketMQ就是针对互联网的生产要求孕育而生的,读者现在也应该明白为什么 RocketMQ 可以支撑阿里集团的海量消息业务了吧。 目前阿里云上的消息队列(MQ)就是RocketMQ的商业版,除了与RocketMQ一样具备极佳的性能,还具备哪些差异和优势呢?我们一起来看一看吧:
阿里云消息队列Kafka企业级消息服务(MQ-Kafka) VS Apache Kafka
为了拥抱开源生态,阿里云消息队列(MQ)MQ 推出 Kafka 企业级消息服务(MQ-Kafka),全面融合 Kafka 开源生态,兼容 Kafka API,做到无缝迁移,打造更安全、更可靠、更易运维的 Kafka 企业级消息服务。
Apache Kafka和 消息队列 Kafka 企业级消息服务(MQ-Kafka)在性能、可用性、可靠性等方面的对比如下:
相关推荐
测试目的在于比较在发送端和接收端共存的情况下,Topic数量对Kafka和RocketMQ性能的影响。测试环境是单机部署,服务器配置包括24核CPU、94GB内存和2TB硬盘,网络带宽为1000Mb/s,应用版本分别是Kafka 0.8.2和...
下的测试对图,是来评测汗宝马和蒸汽机车谁快的组竞速曲线:图1 汗宝马和蒸汽车的速度稳定性对上图的横轴表测试时间,纵轴表车和马的速度,可以看到,马的加速和最速度均
通过阅读《Kafka 权威指南》和《RocketMQ 实战与原理解析》这两本书,你可以深入理解这两个消息中间件的架构、配置、最佳实践以及如何在实际项目中应用它们。对于分布式消息系统的设计和实现,这两份文档将提供宝贵...
本篇文章将深入探讨四种常用的消息中间件:RabbitMQ、ActiveMQ、RocketMQ和Kafka,以及它们在实际应用中的特点和使用经验。 首先,RabbitMQ是一款基于AMQP(Advanced Message Queuing Protocol)协议的开源消息...
在分布式消息系统Kafka中,Topic是数据的逻辑...理解如何创建、查看、分区和删除Topic,以及如何配置相关参数,对优化Kafka集群的性能和可靠性至关重要。熟练掌握这些操作,将有助于构建和维护稳定可靠的Kafka环境。
《Apache Kafka实战》这本书深入浅出地介绍了Apache Kafka这一分布式流处理平台的各个方面,旨在帮助读者掌握Kafka的实际应用和核心概念。Kafka是一个高吞吐量、低延迟的消息发布订阅系统,常用于构建实时数据管道和...
RabbitMQ、RocketMQ、Kafka核心原理剖析 RabbitMQ 是一个基于 AMQP(Advanced ...RabbitMQ、RocketMQ 和 Kafka 都是高性能、高可靠性和可扩展性的消息队列系统,每种系统都有其核心组件和原理,满足不同场景的需求。
依赖方式 <groupId>org.apache.kafka <artifactId>kafka_2.10 <version>0.10.0.0 但是没有被中央仓库的任何jar包依赖!您可以在这里点击下载
【Apache Jmeter Kafka Jar包】是Apache JMeter的扩展组件,专为测试和性能评估Apache Kafka消息系统设计。这个jar包允许用户在JMeter测试计划中直接发送和接收Kafka消息,从而对Kafka集群的性能进行深入分析。 ...
Apache Atlas 2.1.0与CDH 6.3.1的集成,能够为大数据环境提供强大的元数据管理能力,结合Kafka Hook的实时性,可以实现对数据湖或数据管道的高效治理,确保数据质量和安全性。这对于大型企业来说,是构建可靠、可...
<groupId>org.apache.kafka <artifactId>kafka-clients <version>0.10.1.1 </dependency>
MQ对比
1. **准备目标集群**:确认目标Kafka集群的配置与源集群一致,如副本数、分区数等,以确保迁移后Topic的结构和性能保持不变。 2. **备份元数据**:获取源集群中待迁移Topic的元数据,包括Partition的分布情况、...
在本项目中,我们将深入探讨如何使用Spring Boot与Kafka进行集成,实现一个实战项目,包括Kafka的生产者、消费者以及如何创建Topic,并且特别关注指定消费分区这一高级特性。Kafka是一款高吞吐量的分布式消息系统,...
消息中间件技术选型,ActiveMQ、Apollo、RabbitMQ、RocketMQ、Kafka、Redis、ZeroMQ多维护对比分析
从提供的内容来看,这本书由Nishant Garg编写,Packt Publishing出版,详细介绍了如何搭建Apache Kafka集群,并通过实用、动手的例子来开发自定义的消息生产者和消费者。Nishant Garg是一位拥有超过13年工作经验的...
Apache Kafka:Kafka性能调优与最佳实践.docx
能力申请提交成功后,自动根据标识ID创建对应Kafka的Topic。 设计思路: 1、在Java代码中调用ZooKeeper的工具类,创建Topic。 2、建立一个含有Topic属性的JavaBean,set内容到各个属性中。 3、Id的规则尚不明确,...
<groupId>org.apache.kafka <artifactId>kafka-log4j-appender <version>0.10.2.0 </dependency>
Apache Kafka 是一个分布式流处理平台,由LinkedIn 开发并捐赠给了Apache 软件基金会,现在已成为大数据领域的重要组件。Kafka 主要用于构建实时数据管道和流应用,它能够高效地处理大量的实时数据,同时提供了消息...