Потребители Kafka получают много повторов, когда подключаются новые потребители - PullRequest
0 голосов
/ 21 января 2019

Я играю с Кафкой, пытаюсь справиться с этим.Одна из вещей, которую мы должны уметь делать - это запускать наборы серверов с балансировкой нагрузки - для обеспечения избыточности / высокой доступности / и т. Д. - и затем перезагружаться независимо друг от друга.Должно быть просто.

То, что я нашел, немного странно.Если у меня работает один потребитель Kafka, который обрабатывает набор сообщений, а затем я добавляю второго потребителя к той же группе потребителей , пока сообщения обрабатываются, я получаю множество сообщений.раз вместо одного раза.

Например, вот мои файлы журналов только от такого запуска: https://gist.github.com/sazzer/5604d0652ff14533654c8b543942c10e

Это использует 2 Темы - kafka-live и kafka-bulk.Каждая тема имеет 2 раздела - по одному для каждого потребителя.Затем тест добавляет 20 сообщений в массовую очередь, а затем 10 в оперативную очередь.(Это было на самом деле тестирование чего-то другого, но я просто повторно использовал настройки)

Из журналов вы увидите, что каждое сообщение обрабатывается в общей сложности 3 раза, а не один раз, как я ожидал.

Код для этого следующий: https://gist.github.com/sazzer/c67e4db9a04aac8c0d46bbc21188775d

Это использует Spring Boot и Spring Kafka, и - кроме этого одного случая - это просто сработало.

Я что-то упускаю, чтобы остановить воспроизведение всех сообщений, когда появляется новый потребитель?Или мне нужно иметь дело с этим?

Приветствия

1 Ответ

0 голосов
/ 21 января 2019

Попробуйте установить ConsumerConfig.ENABLE_AUTO_COMMIT в false.

Вместо того, чтобы полагаться на то, что клиент выполняет коммиты, контейнер слушателя будет фиксировать смещения после каждого пакета записей после того, как все они были обработаны;он также будет фиксировать любые ожидающие смещения, когда происходит перебалансировка;Вы также можете установить AckMode на RECORD, и он будет фиксировать смещение для каждой обрабатываемой записи.

Вы также можете вручную назначить разделы экземплярам и не использовать управление группами для назначения.

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