#apache-kafka #apache-kafka-streams
#apache-kafka #apache-kafka-streams
Вопрос:
Наличие топологии KafkaStreams, которая использует и после некоторых шагов обработки выдает результаты для другой темы kafka и настроена с:
num.stream.threads: 10
JConsole говорит, что существует 20 потоков-потребителей, 20 потоков-производителей, 20 потоков hearthbeat.
Почему количество таких потоков равно 20 вместо 10? это кажется значительными накладными расходами в случае большого количества num.stream.threads — в рабочей среде мы настроили 64, и в них более 400 собственных потоков Java.
Комментарии:
1. У вас запущено 2 экземпляра вашего приложения?
2. нет, единственный экземпляр
Ответ №1:
Каждый из них StreamThread
(как настроено через num.stream.threads
) создает потребителя, восстанавливает потребителя (возможно, глобального потребителя) и одного производителя (если отключена функция «обработка ровно один раз»; если вы включите обработку ровно один раз, будет создано еще больше производителей).
Каждый клиент-потребитель запускает фоновый поток heartbeat. Каждый клиент-производитель запускает фоновый поток отправителя. Вот почему вы видите больше потоков.
Ответ №2:
Я нашел причину, по которой существует двойное количество потоков. Мы использовали spring-kafka StreamsBuilderFactoryBean для создания KafkaStream, который создает KafkaStream под капотом. После его удаления количество потоков было разделено на 2.