Kafka Streams - "Stream threads" 与 "Tasks" 运行 在 1 C4.XLarge 机器上的关系

Kafka Streams - Relation between "Stream threads" vs "Tasks" running on 1 C4.XLarge Machine

我有一个 Kafka 流拓扑,它有 5 个处理器和 1 个源。此拓扑的源主题有 200 个分区。我的理解是创建了 200 个任务来匹配输入主题的分区数。

此 Kafka Streams 应用程序 运行 在 C4.XLarge 上运行,这 200 个任务 运行 在单个流线程上,这意味着此流线程应该用完所有 CPU 内核 (8) 和内存。

我知道 Kafka 流 parallelism/scalability 由流线程数控制。我可以将 num.stream.threads 增加到 10,但是如果它们都 运行 在单个 EC2 实例上,它会如何提高性能?。它与 运行 在单个 EC2 实例上的单个流线程上执行所有任务有何不同?

如果你有一个 8 核机器,你可能想要 运行 8 StreamsThreads.

This Kafka Streams app is running on C4.XLarge & these 200 tasks run on single stream thread which means this streams thread should be using up all the CPU Cores (8) & memory.

这听起来不正确。单个线程不能利用多个内核。虽然配置单个 StreamThread 意味着启动了更多其他后台线程(消费者心跳线程;生产者发送者线程),但假设您无法通过此设置充分利用所有 8 个内核。

如果 8 StreamsThreads 不能充分利用您的 8 个内核,您可以考虑配置 16 个线程。但是请注意,所有线程都将共享同一个网络,因此,如果网络是实际的限制因素,运行 宁更多的线程不会给你更高的吞吐量(或更高的 CPU 利用率)。对于这种情况,您需要使用多个 EC2 实例进行横向扩展。

鉴于您有 200 个任务,理论上您可以 运行 最多 200 个 StreamThreads 但您可能不需要 200 个线程。