1

我们有一个 Kafka 集群,由 3 个节点组成,每个节点具有 32GB 的 RAM 和 6 核 2.5 CPU。

我们编写了一个 kafka 生产者,它从 twitter 接收推文并将其分批发送到 Kafka 5000 条推文。

在 Producer 中我们使用producer.send(list<KeyedMessages>)方法。

推文的平均大小为 7KB。

打印发送语句前后的时间(以毫秒为单位)来测量发送 5000 条消息所用的时间,我们发现大约需要 3.5 秒。

问题

我们测试 Kafka 性能的方式是否正确?

是否使用带有键控消息列表的 send 方法将一批消息发送到 Kafka 的正确方法?还有其他方法吗?

影响生产者性能的重要配置有哪些?

4

1 回答 1

2

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

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

您可以通过测量消费者发送消息和在另一端接收该消息之间的时间差来实现这一点。

如果集群配置正确(默认配置会这样做),您应该会看到延迟范围从几毫秒(小于 10 毫秒)到 50 毫秒(几十毫秒)不等。

Kafka 能够做到这一点是因为消费者读取的消息甚至不会触及磁盘,因为它们仍在 RAM 中(页面缓存和套接字缓冲区缓存)。请记住,这仅在您能够“赶上”您的消费者时才有效,即没有大的消费者滞后。如果消费者落后于生产者,消息最终将从缓存中清除(取决于消息的速率 - 缓存填满新消息需要多长时间),因此必须从磁盘读取。即使那样也不是世界末日(慢一个数量级,在低 100 毫秒的范围内),因为消息是连续写入的,一条一条是一条直线,也就是单次磁盘寻道。

顺便说一句,您只想给 Kafka 那些 32GB 的一小部分,例如 5 到 8GB(即使 G1 垃圾收集器会因更大的大小而变慢),而其他所有内容都未分配,以便操作系统可以将其用于页面和缓冲区缓存。

于 2016-02-10T15:32:12.560 回答