num.stream.threads создает простаивающие потоки
У меня есть приложение Spring boot kafka stream с 2 темами, рассмотрим темы A и B. В теме A есть 16 разделов, а в теме B - 1 раздел. Считайте, что приложение развернуто в 1 экземпляре, имеющем num.stream.threads
=16. Я выполнил команду kafka-consumer-groups.bat, чтобы проверить, как потоки назначаются разделу в группе, получил следующий вывод. Темам A и B назначено 16 потоков, из которых 14 потоков в теме B простаивают.
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 для каждой темы?
1 ответ
Вы можете установить свойство concurrency для фактической входной привязки. Например,spring.cloud.stream.kafka.streams.bindings.<input-binding-name>.consumer.concurrency
. Это отображается наnum.stream.threads
за кулисами для каждой привязки ввода. Посмотрите, работает ли это, и сообщите нам, если возникнут проблемы.