测试Kafka生产商吞吐量

时间:2016-02-10 08:19:57

标签: apache-kafka kafka-producer-api

我们有一个Kafka集群,包含3个节点,每个节点有32GB RAM和6个核心2.5 CPU。

我们写了一个kafka制作人,他从Twitter接收推文,然后分批发送5000张推文给Kafka。

在制作人中,我们使用producer.send(list<KeyedMessages>)方法。

推文的平均大小为7KB。

打印send语句之前和之后的时间,以测量发送5000条消息所需的时间,我们发现大约需要3.5秒。

问题

我们测试Kafka表现的方式是否正确?

使用带有键控消息列表的send方法以正确的方式向Kafka发送一批消息吗?还有其他办法吗?

影响生产者绩效的重要配置是什么?

1 个答案:

答案 0 :(得分:0)

你只测量生产者方面?该指标仅告诉您可以在一个单位时间内存储多少数据。

也许这就是你想要衡量的,但由于你的问题的标题是“Kafka表现”,我认为你实际上想要衡量吞吐量,即消息需要多长时间才能完成Kafka(通常称为端到端延迟)。

您可以通过衡量消费者在另一方发送消息和接收消息之间的时间差来实现这一目标。

如果群集配置正确(默认配置可以),您应该看到的延迟时间仅为几毫秒(小于10毫秒),最长为50毫秒(几十毫秒)。

Kafka能够做到这一点,因为消费者阅读的消息甚至都没有触及磁盘,因为它们仍然在RAM(页面缓存和套接字缓冲区缓存)中。请记住,只有当您能够“赶上”消费者,即没有大的消费者滞后时,这才有效。如果消费者落后于生产者,则消息最终将从缓存中清除(取决于消息的速率 - 缓存填充新消息所需的时间),因此必须从磁盘读取。即使这不是世界末日(数量级较慢,在ms的低100s范围内),因为消息是连续写入的,一个接一个是直线,这是一个单一的磁盘搜索。

顺便说一下,你想给卡夫卡这个32GB的一小部分,比如说5到8GB(即使是G1垃圾收集器也会因为更大的尺寸而减速)并保留其他所有未分配的内容,因此操作系统可以将其用于页面和缓冲区缓存。