Приложение KafkaStreams имеет накладные расходы на потоки Java

#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.