Кафка Сообщение Доступность - PullRequest
0 голосов
/ 04 мая 2018

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

Чтобы протестировать семантику написания этого подхода в точности один раз, я упаковал всю свою установку в контейнер и через случайные промежутки времени убил один контейнер брокера kafka. Через разные случайные интервалы я убиваю свое приложение. Поэтому время от времени убийство брокера и моего приложения может происходить одновременно.

После убийства я быстро перезапустил их и заметил, что в некоторых, относительно редких случаях, сообщение пишется дважды. Я определил проблему как consumer.endOffsets (), иногда возвращая не последнее смещение раздела, а предыдущее . Я подозреваю, что это может быть связано с тем, что последнее сообщение, отправленное непосредственно перед сбоем приложения, все еще находится в пути. Я также заметил, что отсрочка перезапуска моего приложения решает эту проблему, но это похоже на недетерминированный подход. Я не знаю точно, как долго ждать, прежде чем перезапустить ...

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

Для справки: идемпотентность установлена ​​в значение true, асинхронные реплики равны 2, а в моей теме коэффициент репликации равен трем. Я не указал вручную ни повторов, ни подтверждений, поэтому они автоматически устанавливаются на бесконечность и все. В моем коде нет ручных повторов.

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

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