@KafkaListener параллелизм нескольких тем - PullRequest
0 голосов
/ 29 августа 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 29 августа 2018

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

enter image description here

enter image description here

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

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

EDIT

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

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

и ...

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...