@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
а также...