Sobes.tech
Middle+

¿Kafka garantiza la entrega de mensajes? ¿Puede Kafka perder un mensaje si el productor no recibe un error?

sobes.tech AI

Respuesta de la IA

Kafka garantiza la entrega de mensajes, pero con ciertas condiciones y configuraciones.

Por defecto, Kafka soporta tres niveles de entrega:

  • A lo sumo una vez — los mensajes pueden perderse si el productor no recibe confirmación.
  • Al menos una vez — los mensajes no se pierden, pero pueden duplicarse.
  • Exactamente una vez — configuración compleja que asegura la entrega sin pérdidas ni duplicados.

Si el productor no recibe un error, significa que el mensaje fue aceptado por el broker y registrado en el log, por lo que la pérdida es poco probable. Sin embargo, si el productor no recibe confirmación debido a problemas de red, el mensaje puede enviarse de nuevo, lo que provocará duplicados.

Ejemplo de configuración del productor en Go con confirmaciones:

producer, err := sarama.NewSyncProducer(brokers, &sarama.Config{
    Producer: sarama.ProducerConfig{
        RequiredAcks: sarama.WaitForAll, // esperar confirmación de todas las réplicas
        Retry: sarama.ProducerRetry{
            Max: 5,
        },
    },
})

De esta manera, Kafka no pierde mensajes con una configuración y manejo de errores adecuados, pero es importante gestionar correctamente las confirmaciones y errores en el lado del productor.