3 / 15
Что означают at-most-once, at-least-once и exactly-once и что из этого реально достижимо?
Разница только в том, когда вы подтверждаете сообщение. Подтвердили до обработки — at-most-once: падение между подтверждением и работой теряет сообщение. Подтвердили после — at-least-once: падение между работой и подтверждением приводит к повтору. Третьего варианта на уровне сети нет: отправитель не отличает «сообщение не дошло» от «дошло, а подтверждение потерялось», поэтому он обязан либо повторить, либо смириться с потерей. Exactly-once существует как свойство обработки, а не доставки: доставка остаётся at-least-once, а повторы гасятся дедупликацией по идентификатору и идемпотентным применением результата. Транзакции Kafka дают атомарность только внутри самой Kafka — на запись в базу или на отправку письма они не распространяются.