Правильно ли я понял, что при сбойном сообщении consumer пытается 10 раз его прочитать, затем перепрыгивает на следующее сообщение и если его удалось вычитать, то оффсет смещается и идёт дальше?
Привет. Не встречал подобного описания поведения консумера. По доке подобных прыжков ни кафке ни в спринг кафке не предусмотрено. Есть ссылка? на что ориентируетесь?
Да на странную ситуацию, которую не могу понять Есть listener, который вычитывает сообщения и перекладывает их в oracle. Ack.Acknowledge делается после сохранения, в настройках consumer стоит manual_intermediate И все бы хорошо, но появились пропуски в сохранённых сообщениях. Сформировали тестовое кривое сообщение, бросили в топик, понаблюдали за логами - были попытки отправки, потом прекратились Далее отправили правильное сообщение и оно дошло С одной стороны хорошо, что не блокируется разбор сообщений, с другой понять бы хочется как это вообще работает
а в настройках консюмера стоит автокоммит?
Не, manual_intermediate
я вот о этом: "The listener container for the replies MUST be configured with AckMode.MANUAL or AckMode.MANUAL_IMMEDIATE; the consumer property enable.auto.commit must be false (the default since version 2.3). To avoid any possibility of losing messages, the template only commits offsets when there are zero requests outstanding, i.e. when the last outstanding request is released by the release strategy. After a rebalance, it is possible for duplicate reply deliveries; these will be ignored for any in-flight requests; you may see error log messages when duplicate replies are received for already released replies."
Явно не указано, значит false должен быть, судя по тексту
Попробуйте включить debug у kafka client и spring kafka - узнаете кто и когда коммитит оффсеты
Обсуждают сегодня