Задержка ACK в весеннем Кафке - PullRequest
0 голосов
/ 31 октября 2018

Я использую Spring и Spring Kafka для пакетной службы, которая собирает данные из Kafka до тех пор, пока не будут выполнены определенные условия, а затем выгружает данные.

Я хочу подтвердить коммиты, когда данные покидают мой сервис, но они могут потенциально находиться в памяти в течение 5-10 минут.

Учитывая, что реализации Acknowledgement в Spring Kafka держатся за исходную запись (записи), кажется неразумным удерживать их, пока я не дам свои данные, учитывая, что это будет делать с использованием памяти.

Есть ли другой способ подтвердить / зафиксировать смещения от Spring Kafka, учитывая только информацию о разделе / ​​смещении?

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете использовать AckMode.TIME или AckMode.COUNT с невероятно большим ackTime или ackCount, чтобы контейнер никогда не справлялся.

Затем передайте Consumer<?, ?> в ваш метод слушателя и выполните коммит смещения самостоятельно.

Обратите внимание, однако, что потребитель не является потокобезопасным, поэтому вы должны выполнить фиксацию в потоке слушателя.

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

Кроме того, вам, вероятно, потребуется увеличить max.poll.interval.ms сверх значения по умолчанию (5 минут), чтобы избежать перебалансировки разделов.

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