Exactly-once: qué significa procesar un dato exactamente una vez
Exactly-once es la garantía de que cada mensaje de un flujo produce su efecto una sola vez, sin pérdidas ni duplicados. Es una de las tres semánticas de entrega que puede ofrecer un sistema de streaming, y la más malinterpretada de las tres.
Las tres garantías
- At-most-once (como mucho una vez). El emisor envía y no espera confirmación. Si el mensaje se pierde, se pierde. Nunca hay duplicados, pero puede faltar información. Es aceptable en telemetría de alto volumen donde perder una muestra da igual.
- At-least-once (al menos una vez). El emisor reintenta hasta recibir confirmación. No se pierde nada, pero un acuse de recibo que se extravía provoca un reenvío y, con él, un duplicado. Es el comportamiento por defecto de la mayoría de sistemas.
- Exactly-once (exactamente una vez). Ni pérdidas ni duplicados en el resultado final.
Lo que exactly-once no es
La confusión habitual es entender que el mensaje viaja una sola vez por la red. No es eso. En un sistema distribuido no se puede distinguir un nodo caído de un nodo lento, así que el reintento es inevitable y los mensajes duplicados también.
Lo que garantiza exactly-once es que el efecto observable ocurre una vez: el contador se incrementa una vez, la fila se escribe una vez, el saldo se ajusta una vez. Por eso el nombre más preciso, y el que se usa cuando se quiere ser riguroso, es exactly-once processing o effectively-once: no habla de entregas, habla de resultados.
Cómo se consigue
Los mecanismos reales son dos, y suelen combinarse:
Deduplicación por identificador. Cada mensaje lleva una clave única y el destino lleva registro de lo ya procesado. Si vuelve a llegar la misma clave, se descarta. Requiere guardar ese registro durante una ventana suficiente, lo que tiene un coste de memoria que crece con el volumen y con la tolerancia a reenvíos tardíos.
Escritura transaccional. El avance del consumidor y la escritura del resultado se confirman en la misma transacción. O se hacen las dos cosas o no se hace ninguna, de modo que nunca queda un resultado escrito sin que conste que ese mensaje ya se consumió. Es el enfoque de los checkpoints de Flink y de las transacciones de Kafka.
Y hay una tercera vía que evita el problema en lugar de resolverlo: hacer que la operación sea idempotente. Si aplicar el mismo mensaje dos veces deja el sistema en el mismo estado que aplicarlo una, at-least-once basta y no hace falta maquinaria adicional. Suele ser la opción más barata y la que menos se considera.
El límite: hasta dónde llega la garantía
Exactly-once solo vale dentro del perímetro que el sistema controla. Un motor de streaming puede garantizarlo entre su origen y su destino porque coordina ambos extremos con sus propios checkpoints.
En cuanto el resultado sale de ese perímetro —una llamada a una API externa, un correo, un cargo en una pasarela de pago— la garantía se acaba: el sistema no puede deshacer un efecto que ocurrió fuera. Ahí la única defensa vuelve a ser la idempotencia del receptor, normalmente mediante una clave de operación que el receptor reconozca.
Por eso conviene desconfiar de la promesa de exactly-once formulada sin límites. La pregunta correcta ante un sistema que lo ofrece es siempre entre qué dos puntos concretos rige.
Qué coste tiene
La garantía no es gratis. La escritura transaccional obliga a coordinar confirmaciones entre componentes, lo que añade latencia y reduce el caudal máximo. La deduplicación consume estado proporcional a la ventana que se quiera cubrir.
De ahí que la elección sea un compromiso explícito y no un ajuste que convenga dejar siempre al máximo: en un flujo de eventos de navegación, at-least-once con destino idempotente resuelve el problema real a una fracción del coste. En movimientos contables o en la replicación CDC de una tabla maestra, el duplicado sí importa y la garantía se paga.
El encaje de estas decisiones en el diseño general de una plataforma está desarrollado en la guía de arquitectura de datos de Dataprix. Para comparar cómo aborda cada motor las garantías de entrega, el directorio de plataformas de datos reúne fichas y análisis editorial.
Contenido elaborado con asistencia de inteligencia artificial — Equipo Editorial Dataprix. Verifica la información antes de tomar decisiones.