Exactly-once в Kafka ограничена определённым контуром, прежде всего транзакционным read-process-write внутри Kafka. Она не делает произвольный HTTP-вызов или запись во внешнюю БД автоматически однократными.
Почему при проблеме с дублями использовали at-least-once, а не exactly-once? Какие у exactly-once ограничения?
Exactly-once в Kafka ограничена определённым контуром, прежде всего транзакционным read-process-write внутри Kafka. Она не делает произвольный HTTP-вызов или запись во внешнюю БД автоматически однократными.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Exactly-once в Kafka ограничена определённым контуром, прежде всего транзакционным read-process-write внутри Kafka. Она не делает произвольный HTTP-вызов или запись во внешнюю БД автоматически однократными.
Если бизнес-эффект находится в БД, at-least-once плюс атомарный inbox и идемпотентность часто дают понятную защиту. Kafka transactions требуют правильной работы producer, offsets и read_committed у читателей, добавляя сложность и накладные расходы. Выбор объясняют границами гарантии и ценой ошибки, а не тезисом «exactly-once не существует». Для внешних систем всё равно нужен отдельный протокол.