Saltar al contenido
Explorar conocimiento

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