【问题标题】:num.stream.threads creating idle threadsnum.stream.threads 创建空闲线程
【发布时间】:2020-06-11 09:13:32
【问题描述】:

我有一个带有 2 个主题的 spring boot kafka 流应用程序,考虑主题 A 和 B。主题 A 有 16 个分区,主题 B 有 1 个分区。考虑应用程序部署在具有 num.stream.threads=16 的 1 个实例中。 我运行 kafka-consumer-groups.bat 命令来检查线程是如何分配到组中的分区的,得到以下输出。主题 A 和 B 分配了 16 个线程,其中主题 B 中的 14 个线程空闲。

kafka-consumer-groups.bat --bootstrap-server 0.0.0.0:9092 --group <topic-AGroupName>  -describe
TOPIC     PARTITION      CLIENT-ID
topic-A    0          topic-AGroupStreamThread-429-consumer
topic-A    10         topic-AGroupStreamThread-422-consumer
topic-A    6          topic-AGroupStreamThread-425-consumer
topic-A    14         topic-AGroupStreamThread-431-consumer
topic-A    7          topic-AGroupStreamThread-420-consumer
topic-A    8          topic-AGroupStreamThread-428-consumer
topic-A    11         topic-AGroupStreamThread-430-consumer
topic-A    4          topic-AGroupStreamThread-417-consumer
topic-A    2          topic-AGroupStreamThread-427-consumer
topic-A    1          topic-AGroupStreamThread-418-consumer
topic-A    15         topic-AGroupStreamThread-421-consumer
topic-A    3          topic-AGroupStreamThread-424-consumer
topic-A    9          topic-AGroupStreamThread-419-consumer
topic-A    12         topic-AGroupStreamThread-426-consumer
topic-A    13         topic-AGroupStreamThread-432-consumer
topic-A    5          topic-AGroupStreamThread-423-consumer

kafka-consumer-groups.bat --bootstrap-server 0.0.0.0:9092 --group <topic-BGroupName>  -describe
TOPIC                               PARTITION                    CLIENT-ID
topic-BGroup-result-repartition     0            topic-BGroupStreamThread-683-consumer
topic-B                             0            topic-BGroupStreamThread-678-consumer
-                                   -            topic-BGroupStreamThread-685-consumer
-                                   -            topic-BGroupStreamThread-675-consumer
-                                   -            topic-BGroupStreamThread-673-consumer
-                                   -            topic-BGroupStreamThread-680-consumer
-                                   -            topic-BGroupStreamThread-688-consumer
-                                   -            topic-BGroupStreamThread-674-consumer
-                                   -            topic-BGroupStreamThread-679-consumer
-                                   -            topic-BGroupStreamThread-677-consumer
-                                   -            topic-BGroupStreamThread-687-consumer
-                                   -            topic-BGroupStreamThread-686-consumer
-                                   -            topic-BGroupStreamThread-676-consumer
-                                   -            topic-BGroupStreamThread-684-consumer
-                                   -            topic-BGroupStreamThread-682-consumer
-                                   -            topic-BGroupStreamThread-681-consumer

如何避免主题 B 中的空闲线程,或者是否有任何选项可用于设置每个主题的 num.stream.threads?

【问题讨论】:

    标签: apache-kafka-streams spring-cloud-stream spring-cloud-stream-binder-kafka spring-boot-cloud-streams


    【解决方案1】:

    您可以在实际输入绑定上设置并发属性。例如spring.cloud.stream.kafka.streams.bindings.&lt;input-binding-name&gt;.consumer.concurrency。每个输入绑定都会在后台映射到num.stream.threads。看看这是否有效,如果您发现任何问题,请告诉我们。

    【讨论】:

    • 感谢您的回复。我尝试使用 2 个案例启用上述配置。 1.num.stream.threads:16 spring.cloud.stream.kafka.streams.bindings.topic-A-input.concurrency:16 spring.cloud.stream.kafka.streams.bindings.topic-B-input.concurrency: 1 结果没有变化。 2.num.stream.threads:1 spring.cloud.stream.kafka.streams.bindings.topic-A-input.concurrency:16 spring.cloud.stream.kafka.streams.bindings.topic-B-input.concurrency: 1 一个线程分配给主题 A 中的所有 16 个分区,1 个线程按预期分配给 1 个分区。还是没有解决。
    • 抱歉,属性定义中需要consumer。请在上面查看我的编辑。
    • 它的行为仍然没有改变。谢谢
    • 请创建一个小应用程序并将其分享到某个地方(可能是 GitHub),我们可以在那里重现您的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2022-01-10
    • 1970-01-01
    • 2011-11-27
    • 2016-06-12
    相关资源
    最近更新 更多