繁体   English   中英

Kafka 流中最有效的线程数

[英]Most efficient number of threads in Kafka streams

我将 Kafka Streams 用于一个主题(有 3 个分区)。

我想知道 Kafka Streams num.stream.threads 选项中最有效的线程数。

1 个线程和 3 个任务VS 3 个线程和 1 个任务(在每个线程中)哪个更好?

PS 服务器有 3 核 CPU。

答案是,视情况而定! 通常,拥有与分区/任务一样多的线程会更有效,因为这将为您提供更好的并行性。 但是,如果您没有足够的 CPU,由于上下文切换,线程过多也可能是灾难性的。

您还必须考虑要处理的数据的吞吐量,以及对每条记录执行的操作成本。 如果您的流应用程序不是真正的数据密集型,您可能没有兴趣分配大量线程,因为它们大部分时间都处于空闲状态。

因此,最好从单个线程开始并执行负载测试来衡量应用程序的性能。 为此,您可以使用 Apache kafka(或 Confluent)发行版中提供的命令行工具,即bin/kafka-producer-perf-test.sh并使用 JMX监控Kafka Streams 公开的指标(请参阅:监控Kafka Streams - Confluent 文档)。

此外,您应该注意,您可以分配给应用程序的最大线程数并不完全等于您在拓扑中声明的输入主题的分区数。 实际上,您还应该考虑应用程序生成的所有子拓扑中的所有主题。

例如,假设您正在使用具有 3 个分区的流主题,但您的应用程序执行了重新分区操作。 然后,您将最终得到两个子拓扑,每个子拓扑使用一个具有 3 个分区的主题。 因此,您总共将有 6 个任务,这意味着您最多可以配置 6 个线程。

注意:通常,建议使用单线程部署 KafkaStreams 实例,并通过添加更多实例进行水平扩展。 这简化了扩展模型,尤其是在使用 Kubernetes 时(即 1 pod = 1 KafkaStreams 实例 = 1 线程)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM