Очереди, потоки, события
Гарантии доставки: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь в реальном инциденте — не определение для заучивания, а компромисс, который надо взвесить, пока клиентов списывают дважды.
Убедись, что связываешь доказательство невозможности, плечи сбоев, идемпотентность консьюмера, транзакции Kafka, механику SQS и outbox в одну связную историю end-to-end корректности.
Вендор рекламирует у очереди 'exactly-once delivery'. Senior-ревьюер возражает. Какое возражение точное и корректное?
Из трёх плеч сбоев какое порождает дубликаты, с которыми реально борешься в проде, и почему фикс ложится на консьюмера?
Команда реализует дедуп консьюмера так: SELECT по msg_id; если нет — вызвать Stripe и сделать INSERT. При ребалансе consumer-group всё равно видят двойные списания. В чём структурный дефект?
У Kafka Streams-джобы стоит enable.idempotence=true и transactional.id, она пишет в output-топик И в таблицу Postgres. После рестарта брокера в Postgres всё равно дубли строк. Почему?
У SQS-консьюмера средняя обработка 30с; дефолтный visibility timeout очереди 30с. Инженеры сообщают о спорадической одновременной двойной обработке. Первый фикс и что он даёт?
Сервис обновляет Postgres и публикует событие в Kafka двумя отдельными шагами. Под нагрузкой downstream-консьюмеры иногда вообще не видят событие, чья строка в БД явно закоммичена. Какой паттерн чинит первопричину?
Сквозная линия юнита — одна цепочка: exactly-once delivery невозможна (Two Generals), поэтому работаешь по at-least-once и переносишь корректность на консьюмера. Дубликаты концентрируются на плече 3; самая дешёвая защита — INSERT-first транзакционный дедуп, расширенный Idempotency-Key в стиле Stripe для внешних вызовов. Idempotent producer Kafka (~3%) и транзакции (~20–30%) укрепляют только путь внутри Kafka — кросс-системным записям всё равно нужен дедуп консьюмера. SQS visibility timeout должен быть ~6x обработки (или с heartbeat), а паттерн outbox закрывает разрыв dual-write на стороне продюсера. Гарантии брокера необходимы, но никогда не достаточны.