201просмотров
62.6%от подписчиков
1 ноября 2025 г.
Score: 221
💬 Message Deduplication в Kafka / RabbitMQ — как бороться с дублирующимися сообщениями В распределённых системах дубликаты сообщений — это норма, а не баг. Сеть может «повторить» запрос, брокер — переотправить сообщение, продюсер — не получить подтверждение и снова отправить.
Если не обработать дубли — бизнес-логика может «стрельнуть себе в ногу». 🧠 Основные подходы к deduplication: 1️⃣ Идемпотентные операции — самое надёжное.
Каждое сообщение обрабатывается так, что повтор не влияет на результат (пример: UPDATE balance SET amount = 100 вместо amount += 100). 2️⃣ Message ID tracking
Храним идентификаторы уже обработанных сообщений (например, в Redis или в compacted-топике Kafka). Если ID уже есть — пропускаем. 3️⃣ Exactly-once delivery (Kafka Streams)
Kafka поддерживает режим exactly-once semantics — гарантирует, что сообщение будет обработано ровно один раз, даже при сбоях. 4️⃣ TTL + Garbage Collector
Старые ID через время можно очищать, чтобы не накапливались в памяти. ⚡️ Главное — помнить:
в очередях не бывает «ровно один раз», бывает “at least once” или “at most once”.
Deduplication — это то, что делает систему надёжной, несмотря на реальность сети.