concepto · intermedio · 2 min de lectura
Exactly Once Semantics
Exactly once es la garantía de que un mensaje se procesa exactamente una vez, incluso si hay reintentos y fallas, evitando tanto la pérdida como la duplicación de mensajes.
No requiere conocimientos previos.
Alcance en breve
Cubre
- Exactly Once as a concept
No cubre
- implementation details
Supone
- The reader understands relevant fundamentals.
Resumen
En sistemas de mensajería, las garantías de entrega definen qué puede esperar el consumidor: at most once —el mensaje puede perderse—, at least once —el mensaje puede duplicarse—, exactly once —el mensaje se entrega y procesa exactamente una vez—.
Exactly once es la garantía más fuerte y la más difícil de implementar. Requiere coordinación entre el productor, el broker y el consumidor: idempotencia en escrituras, deduplicación, y transacciones. Kafka logra exactly-once con productores idempotentes y transacciones que abarcan leer de un topic y escribir a otro.
Alcance y supuestos
Cubre las tres garantías de entrega (at most, at least, exactly once) y cómo se implementan. Asume familiaridad con mensajería.
Modelo mental
Un cartero que entrega un paquete. At most once: lo deja en la puerta y se va —si alguien lo roba, se perdió—. At least once: toca el timbre, si no atienden vuelve mañana —puede que entregues dos paquetes si la primera entrega sí llegó pero no te enteraste—. Exactly once: te pide que firmes un recibo y guarda copia —sabe con certeza que lo recibiste una sola vez—.
Uso práctico
- ✅ Kafka con transacciones, Flink con checkpoints, RDBMS con idempotency keys.
- ❌ Sistemas donde at least once + idempotencia del consumidor alcanza.
Ejemplo trabajado: exactly once en Kafka
Un productor envía transacciones bancarias. Con idempotent producer y transactional.id, Kafka garantiza que cada mensaje se escriba exactamente una vez en el topic de salida, incluso si el productor reintenta tras un timeout. El consumidor lee del topic con isolation.level=read_committed.
Evidencia
- Kafka implementa exactly-once semantics desde la versión 0.11 con idempotent producers y transactions.
Fuentes citadas
- Wikipedia, Apache Kafka (Síntesis, 21-07-2026)