At-most-once допускает потерю без повторной доставки, at-least-once — повторную обработку без намеренной потери, exactly-once ограничивает повторные эффекты внутри заданного контура.
В чем разница между стратегиями доставки сообщений At-least-once, At-most-once и Exactly-once в Kafka?
At-most-once допускает потерю без повторной доставки, at-least-once — повторную обработку без намеренной потери, exactly-once ограничивает повторные эффекты внутри заданного контура.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
At-most-once допускает потерю без повторной доставки, at-least-once — повторную обработку без намеренной потери, exactly-once ограничивает повторные эффекты внутри заданного контура.
Если consumer фиксирует offset до обработки, сбой может потерять результат. Если после — сбой между действием и фиксацией приводит к повтору, поэтому обработчик делают идемпотентным.
В Kafka транзакционная обработка может атомарно связать выходные записи и offsets; получатели должны учитывать только подтверждённые транзакции. Идемпотентный producer решает повторы записи от повторной отправки, но не произвольную бизнес-дедупликацию. Для внешней БД или HTTP-вызова нужны дополнительные гарантии: уникальный ключ операции, outbox или согласованный протокол. «Exactly-once везде» без обозначения границ — некорректное обещание.