introducción
en sistemas event‑driven los mensajes pueden perderse o duplicarse por fallas de red y reintentos. kafka ofrece distintos niveles de entrega: at‑most‑once, at‑least‑once y exactly‑once.
elegir la garantía correcta es un balance entre costo y riesgo: logging tolera pérdidas; pagos requieren evitar duplicados; analítica batch puede preferir reintentos.
comparativa rápida
| garantía | llega siempre | puede duplicarse | puede perderse |
|---|---|---|---|
| at‑most‑once | ✘ no | ✘ no | ✔ sí |
| at‑least‑once | ✔ sí | ✔ sí | ✘ no |
| exactly‑once | ✔ sí | ✘ no | ✘ no |
at‑most‑once
prioriza velocidad: el producer no reintenta ni espera acks fuertes. si hay fallo de red, el mensaje puede perderse, pero nunca se procesa dos veces.


at‑least‑once
garantiza llegada reintentando. consecuencia: puede haber duplicados. se mitiga con idempotencia en producer y/o deduplicación en el consumidor.




exactly‑once (EOS)
evita duplicados y pérdidas con idempotencia y transacciones. requiere: enable.idempotence=true, acks=all, retries altos, transactional.id y consumidores con isolation.level=read_committed.


configs útiles
// Producer idempotente enable.idempotence=true acks=all retries=2147483647 max.in.flight.requests.per.connection=5 // Producer transaccional (EOS) transactional.id=payments-tx-01 // Consumer que ignora mensajes no confirmados isolation.level=read_committed