Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)(二)

生产者吞吐量与存储数据

许多消息系统的隐藏危险之一是,对于在内存中保留的数据,它们工作的很好。但当数据备份不消耗(因此需要存储在磁盘上)时,它们的吞吐量下降一个数量级(或更多)。这意味着只要您的消费者保持消息队列及时清掉,事情就可以正常运行。但是一旦它们滞后,整个消息层将备份未消耗的数据。备份导致数据进入磁盘,这反过来会导致性能下降到一个速率,这意味着消息传递系统不能再跟上传入的数据,并把它们备份或者直接挂掉。这是非常可怕的,因为在许多情况下,队列的终极目的是优雅地处理这样的情况。

由于Kafka对于未消费的消息,总是保证O(1)的性能。

为了测试这个实验,让我们运行一段更长的时间,并在存储的数据集增长时绘制结果:

该图实际上显示了性能方面的变化,但跟数据大小没有影响,写入TB数据后跟最初写入几百MB性能一样好。

这种差异是由于Linux的I / O管理设施批处理数据,然后定期刷新。我们在Kafka生产集群配置上设置得更好。http://kafka.apache.org/documentation.html#hwandos

消费者吞吐量

现在让我们将注意力转向消费者吞吐量。

注意,复制因子不会影响此测试的结果,因为消费者只能从一个副本读取,无视副本数量。同样,生产者的确认级别也不重要,因为消费者只读取完全确认的消息(即使生产者不等待完全确认)。这是为了确保消费者看到的任何消息是在leader切换(如果当前leader失败)之后。

单个消费者

90452条记录/秒(89.7 MB /秒)

第一次测试,我们将在一个线程从我们的6分区3副本主题消费5000万条消息。

kafka的消费者是非常高效的。它通过从文件系统直接获取日志块来工作。它使用sendfile API直接通过操作系统传输,而无需通过应用程序复制此数据的开销。这个测试实际上是从日志头部开始,所以它正在做真正的I / O读取。然而,在生产环境中,消费者几乎完全从操作系统页面缓存中读取,因为它正在读取刚刚由一些生产者写入的数据(因此仍然被缓存)。实际上,如果您在生产服务器上运行I / O stat,看到即使消耗了大量数据,也没有任何物理读取。

对于期望的Kafka,消费者廉价是很重要的。一方面,副本自身就是消费者,所以让消费者便宜,使得复制便宜。另外,这样可以将数据处理变成一种廉价的操作,因此我们不需要紧紧控制可扩展性。

三个消费者

2615968个记录/秒(249.5 MB /秒)

让我们重复同样的测试,但是运行三个并行的消费者进程,每个进程在不同的机器,并且消耗同一主题。

如预期的那样,基本是线性扩展。(不奇怪,因为我们的模型中的消费者是如此简单)。

生产者和消费者

795064记录/秒(75.8 MB /秒)

上述测试只包括生产者和消费者独立运行。现在我们来做更符合实际情况的事情,一起运行。实际上,在技术上已经这样做了,因为我们的副本复制是把服务器当作消费者来实现的。

我们来运行测试。对于此测试,我们将在六分区3副本主题上运行一个生产者和一个消费者,这些主题将开始为空。生产者使用异步复制。报告的吞吐量是消费者吞吐量(生产者吞吐量的上限)。

正如我们预期的那样,结果基与只有生产者的情况相同 – 消费者相当便宜。

消息大小的影响/

之前报告的是100字节的小消息。较小的消息是消息系统更难的问题,因为它们会放大系统记录的开销。改变记录大小,在按照条数/秒和MB /秒中绘制吞吐量来证明。


正如预期,这个图表显示由于数据变大,我们每秒可以发送的记录的原始记录条数减少。但是,如果在MB /秒图中,随着消息变大,实际用户数据的总字节吞吐量增加:

使用10个字节的消息,实际上被CPU来限制,因为是获取锁和发送消息入队操作,不能最大限度地发挥网络性能。然而,从100字节开始,网络开始饱和(尽管MB / sec持续增加,因为固定大小的字节与发送总字节占比的越来越小)。

端到端延迟

2ms(中位数)

3毫秒(99百分位数)

14毫秒(99.9百分位数)

关于吞吐量,我们已经谈到了很多,但是什么是消息传递的延迟?

也就是说,我们发送给消费者的消息需要多长时间?

对于这个测试,我们将创建生产者和消费者,并针对生产者向kafka集群发送消息需要多长时间,被消费者接收进行多次计时。

注意,Kafka只有所有同步副本确认消息时,才向消费者发出消息。无论是使用同步还是异步复制,这个测试将给出相同的结果。因为该设置只影响生产者的确认。

重复测试

如果你想在自己的机器上尝试这些基准测试,完全没问题。正如我所说,我大多只是使用我们与Kafka一起提供的预装性能测试工具,并且主要使用服务器和客户端的默认配置。您也可以在此处查看有关配置和命令的更多详细信息https://gist.github.com/jkreps/c7ddb4041ef62a900e6c。

转载自 并发编程网 - ifeve.com

时间: 2024-10-01 09:37:36

Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)(二)的相关文章

什么时候该用RabbitMQ ,什么时候该用 Apache Kafka

人类如何做出决策? 在日常生活中,情感总是短路因素,导致在复杂或压倒性的决定上扣动扳机.但对于做有长期影响,复杂决策,的表意识,不可能是纯粹的冲动.高性能的人通常使用断路器,"本能," "直觉," 或其他的情绪,只有一次他们的表意识,潜意识吸收了作出决定所需的所有事实. 今天有很多的消息传递技术, 数不清的 ESBs, 和近100 iPaaS供应商在市场上. 自然,这导致了有关如何为您的需要-特别是那些已经投资在一个特定的选择,选择正确的消息传递技术的问题 .我们批

(转载)从Apache Kafka 重温文件高效读写

        文章转自<从Apache Kafka 重温文件高效读写>,地址:http://calvin1978.blogcn.com/articles/kafkaio.html!         写的非常不错,转载下来! 0. Overview 卡夫卡说:不要害怕文件系统. 它就那么简简单单地用顺序写的普通文件,借力于Linux内核的Page Cache,不(显式)用内存,胜用内存,完全没有别家那样要同时维护内存中数据.持久化数据的烦恼--只要内存足够,生产者与消费者的速度也没有差上太多,

Apache Kafka是分布式发布-订阅消息系统

转自: http://www.infoq.com/cn/articles/apache-kafka?utm_source=infoq&utm_medium=popular_links_homepage 简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交日志服务. Apache Kafka与传统消息系统相比,有以下不同: 它被设计为一个分布式系统,易

【译】使用Apache Kafka构建流式数据平台(1)

前言:前段时间接触过一个流式计算的任务,使用了阿里巴巴集团的JStorm,发现这个领域值得探索,就发现了这篇文章--Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform(Part 1).在读的过程中半总结半翻译,形成本文,跟大家分享. 最近你可能听说很多技术名词,例如"流式处理"."事件数据"以及"实时"等,与之相关的技术有Kafka.S

Apache Kafka源码分析 – Broker Server

1. Kafka.scala 在Kafka的main入口中startup KafkaServerStartable, 而KafkaServerStartable这是对KafkaServer的封装 1: val kafkaServerStartble = new KafkaServerStartable(serverConfig) 2: kafkaServerStartble.startup   1: package kafka.server 2: class KafkaServerStartab

Apache Kafka 0.8.2.1 发布,消息发布订阅系统

Apache Kafka 0.8.2.1 发布,该版本修复了 4 个关键 bug: [KAFKA-1919] - Metadata request issued with no backoff in new producer if there are no topics [KAFKA-1952] - High CPU Usage in 0.8.2 release [KAFKA-1971] - starting a broker with a conflicting id will delete

Apache Kafka:大数据的实时处理时代

在过去几年,对于 Apache Kafka 的使用范畴已经远不仅是分布式的消息系统:我们可以将每一次用户点击,每一个数据库更改,每一条日志的生成,都转化成实时的结构化数据流,更早的存储和分析它们,并从中获得价值.同时,越来越多的企业应用也开始从批处理数据平台向实时的流数据数据平台转移.本演讲将介绍最近 Apache Kafka 添加的一些系统架构,包括 Kafka Connect 和 Kafka Streams,并且描述一些如何使用它们的实际应用体验. 注:本文由王国璋在 QCon 北京 201

Apache Kafka的代码实例

前提: 已经配置好kafka.若未安装,可以参照[Apache Kafka]安装升级指南 已在eclipse里面安装scala插件.Eclipse Kepler中在Help->Eclipse Markectplace中搜索Scala,然后安装即可. 使用maven构建kafka测试project在eclipse中. 创建topic:在kafka的安装目录下执行bin/kafka-create-topic.sh --zookeeper 192.168.20.99:2181 --replica 1

在Docker上运行Apache Kafka

本文讲的是在Docker上运行Apache Kafka,[编者的话]在研究Apache Kafka和Docker时,作者发现Docker是一个非常神奇的技术,它将开发过程简化的如此完美.又因为有wurstmeister/kafka和wurstmeister/zookeeper这两个镜像,运行Apache Kafka和使用Docker是那样的轻松,还有比这更让人觉得兴奋的事情么!让我们完全从安装.维护机器和软件中解脱出来. 一直很想鼓捣Apache Kafka,但由于我想鼓捣的事太多,Kafka一