@KafkaListener параллелизм нескольких тем

Я хочу создать параллельный @KafkaListener который может обрабатывать несколько тем, каждая с разным количеством разделов.

Я заметил, что Spring-Kafka инициализирует только одного потребителя на раздел для темы с большинством разделов.

Пример: я установил параллелизм на 8. Я получил @KafkaListener слушая следующие темы. Тема А имеет наибольшее количество разделов - 5, поэтому Spring-Kafka инициализирует 5 потребителей. Я ожидал, что Spring-Kafka инициализирует 8 потребителей, что максимально допустимо в соответствии с моим свойством параллелизма.

  • Тема А имеет 5 разделов
  • Тема B имеет 3 раздела
  • Тема C имеет 1

Какая техническая причина не инициализировать больше потребителей?

Как мне обойти это, чтобы я мог инициализировать больше потребителей, используя @KafkaListener аннотаций? (если возможно вообще)

1 ответ

Решение

Когда слушатель настроен на прослушивание нескольких тем, каждый экземпляр потребителя прослушивает все темы; Spring действительно запускает 8 потребителей (в данном случае), но способ, которым эти разделы фактически распределяются между потребителями, контролируется руководством группы Kafka:

введите описание изображения здесь

введите описание изображения здесь

Таким образом, в этом случае вы получите 3 неработающих потребителя.

Можно было бы предоставить partition.assignment.strategy делать дистрибуцию так, как вы хотите, но я никогда не смотрел на это.

РЕДАКТИРОВАТЬ

Я только что проверил с RoundRobinAssignor...

spring.kafka.consumer.properties.partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor

а также...

введите описание изображения здесь

Другие вопросы по тегам