Patrones de Reintento: Backoff, Circuit Breaker y Kafka

el anti-patrón: un único intento

Request único que falla
si falla una vez, el usuario queda esperando o cae en 500. necesitamos **reintentos** y/o **circuit breaker**.

retry con backoff exponencial

Reintentar de inmediato satura al servicio. Con backoff exponencial esperamos 1s, 2s, 4s, 8s… hasta un máximo de intentos. Si finalmente falla, degradamos la respuesta o vamos a una cola para reprocesar.

Reintentos con backoff
ejemplo de 5 intentos con espera exponencial.

circuit breaker (no dejes colgado al cliente)

Si un downstream falla mucho, **abrimos** el circuito y devolvemos **fallback** inmediato, evitando timeouts y tormentas de reintentos. Luego pasamos a **half-open** para probar un request y reabrir si mejora.

Circuit Breaker con fallback
responde rápido y agenda para reprocesar cuando el servicio vuelva.
Estados del Circuit Breaker

retry pattern en kafka (topics retry + error)

Para eventos, reintentar dentro del mismo consumer puede bloquear la partición. Un patrón común es publicar en **topic-retry** con backoff (o varios topics con TTL/delay) y, si se agotan los intentos, enviar a **DLT** (dead-letter topic) para remediación.

Retry Pattern Kafka
origen → retry → error (DLQ). el consumidor de retry aplica backoff y vuelve a intentar.

reglas rápidas

  • Idempotencia: diseña operaciones seguras ante reintentos.
  • Timeouts: siempre más cortos que los del LB/ingress.
  • Jitter: añade aleatoriedad al backoff para evitar sincronía.
  • Observabilidad: métricas de tasa de fallos, estado del CB, tamaño de DLT.
  • UX: comunica “en proceso” cuando devuelves fallback.