Идемпотентность — контроль повторов¶
Сценарий. Объект перепроводится или перезаписывается без изменения данных, и в Kafka уходят одинаковые сообщения. Потребители вынуждены дедуплицировать их на своей стороне.
Решение. Включите флаг Идемпотентная отправка у продюсера и/или Идемпотентная обработка у консьюмера. Адаптер начнёт отсекать сообщения, содержимое которых не изменилось.
Как это работает¶
- При успешной выгрузке (обработке) сообщения адаптер сохраняет SHA-256-хэш его тела в регистр «Хэш-суммы сообщений» — по ключу записи локальной очереди.
- При следующей выгрузке (обработке) той же записи очереди хэш текущего тела сравнивается с сохранённым.
- Если хэши совпали — операция отменяется:
| Направление | Статус записи | Текст журнала |
|---|---|---|
| Исходящее | Выгрузка отменена | «Сообщение уже выгружено» |
| Входящее | Обработка отменена | «Сообщение уже обработано» |
Если содержимое изменилось — сообщение выгружается/обрабатывается как обычно, а сохранённый хэш обновляется.
Сравнение — только в рамках одной записи очереди
Адаптер сравнивает текущее состояние записи локальной очереди с её предыдущей версией. Два разных объекта (или две разные записи очереди) с одинаковым телом не считаются повторами.
Когда сообщение не уйдёт повторно¶
- Пользователь перепровёл документ, не меняя данные, — тело сообщения совпало с прошлой выгрузкой.
- Из Kafka повторно пришло то же сообщение — консьюмер с идемпотентной обработкой не вызовет обработчик второй раз.
Как форсировать повторную отправку¶
Автоматической перепостановки отменённых сообщений нет. Варианты — по убыванию предпочтительности:
- Изменить данные объекта — новое тело даст другой хэш, и сообщение уйдёт штатно.
- Удалить запись из регистра «Хэш-суммы сообщений» по ключу записи очереди (форма списка регистра доступна администратору).
- Дождаться очистки истории хэшей по сроку хранения (по умолчанию 3 дня, поле Идемпотентность на вкладке Kafka / Администрирование / Очереди) — после удаления хэша повторная выгрузка пройдёт.
- Временно выключить флаг идемпотентности у продюсера/консьюмера, повторить операцию и включить флаг обратно.
Смотрите также¶
- Статусы сообщений — «Выгрузка отменена» и «Обработка отменена».
- Продюсеры, Консьюмеры — где включается настройка.
- Обслуживание очередей — очистка локальных очередей.