Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kafka: deduplication, exactly once, idempotency

Как реализовать дедупликацию событий в Kafka при Exactly-Once потоке без использования транзакций Kafka?

Проверяет архитектурное мышление и способность обеспечить правильную доставку событий

Короткий ответ

Используют внешний idempotency key + хранение последних offsets/IDs в Redis/Postgres.

Каждое событие имеет уникальный ID, и консьюмер проверяет, было ли оно обработано.

Длинный ответ

Существует несколько стратегий:

1. Idempotency Key + Redis SET

Каждое сообщение имеет уникальный ID.

Потребитель делает:

SETNX event_id 1   → если OK → обрабатываем  
если EXISTS → пропускаем  

2. Postgres UPSERT

INSERT ... ON CONFLICT DO NOTHING

3. Deduplication window

ID хранятся N часов, иначе память взорвётся.

4. Deterministic projection

Финальный результат = функция от входных данных.

Например:

  • выставление статуса → идемпотентная операция

  • запись агрегата с версией

5. Consumer-side caching

Local LRU cache + persistent store.

Почему не нужны транзакции Kafka?

Потому что мы обеспечиваем exactly-once на уровне side-effects, а не Kafka commit.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    9

Навыки

  • Kafka

    Kafka

Ключевые слова

#deduplication

#exactly once

#idempotency

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.