консюмеров) должно быть несколько (в несколько потоков, в один не вывозит)
3. Порядок сообщений важен в пределах топика
Как это правильно сделать? Хотелось бы создать пул контейнеров слушателей или консюмеров, и динамически подписывать их на топик и отписывать от них.
Текущее решение пока такое — создавать слушателей с помощью фабрики с concurrency > 1, слушатели подписываются на паттерн имени топика, в конфиге контейнера выставляется metadata.max.age.ms в несколько секунд. Но это решение выглядит не очень производительным и надёжным
Я снова выхожу на связь. Если задавать слушателей через @KafkaListener с подпиской на топики по префиксу и ставить в factory бине concurrency с одной группой на всех консьюмеров, то происходит следующая вещь — в каждый момент работает только один консьюмер, а другие простаивают, причём в логах есть такие ошибки Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies t hat the poll loop is spending too much time message processing. You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.
Обсуждают сегодня