Apache Kafka 中的分区数量与生产者吞吐量

use*_*ult 5 apache-kafka kafka-consumer-api kafka-producer-api

分区数量对 Kafka 中的生产者吞吐量有影响吗?(我知道分区数是消费者端并行度的上限,但是它会影响生产者性能吗?)

我使用 Kafka 中的生产者性能工具在 AWS 上的 Kafka 集群设置上对此进行了测试。我观察到,对于 3、6 和 20 个分区,集群中的聚合吞吐量大致相似(大约 200 MB/s)。如果您能帮我澄清这个问题,我将不胜感激。

谢谢。

小智 1

答案分为两部分:

  1. 从Kafka消费者的角度来看。是的,分区为 Kafka 消费者提供了更高的吞吐量。但是,我发现如果您想要良好的可扩展性,您确实希望最大限度地减少 Kafka 消费者(以及分区)的数量。这是我去年写的关于 Kafka IoT 应用程序的博客的链接(请参阅第 2.3 节)
  2. 从 Kafka 生产者的角度来看,吞吐量随着分区的增加而下降。上周,我对 Kafka 生产者和不同数量的分区进行了一些基准测试,发现随着分区数量的增加,吞吐量显着下降。要正确“调整”Kafka 集群的大小,唯一的解决方案是增加 Kafka 集群的大小(节点和/或核心),直到获得具有所需分区数量的目标容量。我需要 2M 写入/秒和 200 个分区(用于消费者端的并发)。对于 6 节点(每个节点 4 个核心)集群,我可以对 6 个分区进行 210 万次写入/秒,但对 200 个分区只能进行 120 万次写入/秒。在具有 8 个核心节点的 6 节点集群上,我可以通过 6 个分区获得 4.6M 写入/秒,略高于我的目标吞吐量(200 个分区的 2.4M 写入/秒)。我尚未在博客中介绍这些结果,但这里有当前博客系列 ( Anomalia Machina ) 的链接。

注意:还可以通过 (a) 减少复制因子或 (b) 仅写入分区子集 (!) 来增加吞吐量,但您可能不需要所有分区。