Метрики Kafka для потребителей Spring-Kafka — возможность уменьшить количество потоков «микрометр-кафка-метрики»JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Метрики Kafka для потребителей Spring-Kafka — возможность уменьшить количество потоков «микрометр-кафка-метрики»

Сообщение Anonymous »

У меня есть приложение Spring-Boot с несколькими потребителями из одной и той же группы потребителей, использующими @KafkaListener из Spring-Kafka. После расследования я обнаружил, что на каждого потребителя создается 4 потока:
  • Код: Выделить всё

    kafka-coordinator-heartbeat-thread
    — создано из AbstractCoordinator
  • Код: Выделить всё

    org.springframework.kafka.KafkaListenerEndpointContainer*
    / kafka-listener-* — создано из KafkaMessageListenerContainer, шаблон имени потока основан на поле id @KafkaListener, если оно указано
  • Код: Выделить всё

    ThreadPoolTaskScheduler
    — создано из KafkaMessageListenerContainer (вместо этого можно установить собственный пул потоков через новый ConcurrentKafkaListenerContainerFactory().getContainerProperties().setScheduler(threadPoolTaskScheduler);

    Код: Выделить всё

    micrometer-kafka-metrics
    - создано на основе KafkaMetrics
Текущий вопрос касается только потоков micrometer-kafka-metrics, остальные исключены.

Код: Выделить всё

micrometer-kafka-metrics
— это поток демона, созданный io.micrometer:micrometer.core внутри KafkaMetrics:

Код: Выделить всё

ScheduledExecutorService scheduler = Executors
.newSingleThreadScheduledExecutor(new NamedThreadFactory("micrometer-kafka-metrics"));
Цепочка вызовов следующая. KafkaMetricsAutoConfiguration (из Spring-boot-actuator-autoconfigure) создает один экземпляр MicrometerConsumerListener (из Spring-kafka) для каждого приложения, а после этого MicrometerConsumerListener имеет метод ConsumerAdded(..), который вызывается для каждого Consumer. Он создает KafkaClientMetrics (который является продолжением KafkaMetrics).
В результате количество потребителей совпадает с количеством потоков micrometer-kafka-metrics.. p>
Если у нас есть параллелизм потребительской фабрики как N (

Код: Выделить всё

new ConcurrentKafkaListenerContainerFactory().setConcurrency(N);
) и количество @KafkaListener как M (по одному на каждую тему, так как у нас M тем), в результате у нас есть N * M потоков с именем micrometer-kafka-metrics< /code>.
В большинстве случаев N * M — это небольшое число, но в некоторых редких случаях оно может достигать нескольких сотен (как в моем случае). Я хочу оставить количество одновременных потребителей как есть, но уменьшить количество потоков метрик, поскольку потоки метрик довольно легкие и планируются с фиксированной частотой (по умолчанию 1 минута).
Поэтому я Я ищу способы уменьшить количество этих потоков. В идеале было бы здорово иметь возможность передавать туда дополнительный собственный пул потоков, который будет доступен всем потребителям и с желаемым количеством потоков. Похоже, на данный момент это невозможно, и микрометр не предоставляет такой возможности (возможно, в этом случае имеет смысл внести свой вклад), или я что-то упускаю? Есть ли другие варианты?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ber-of-thr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»