Sobes.tech
Senior

¿Qué garantía de entrega soporta cuando se habla de Kafka?

sobes.tech AI

Respuesta de la IA

En Kafka, se pueden garantizar tres niveles principales de entrega de mensajes:

  1. Como máximo una vez (no más de una vez) — el mensaje puede ser entregado 0 o 1 vez. Esto puede implicar pérdida de mensajes, por ejemplo, si ocurre un fallo antes de la confirmación.

  2. Al menos una vez (al menos una vez) — el mensaje será entregado garantizadamente, pero puede ser entregado varias veces (duplicados). Esto se logra mediante confirmaciones del broker y reenvíos si es necesario.

  3. Exactamente una vez (una sola vez) — la garantía más estricta, donde el mensaje se entrega y procesa exactamente una vez. En Kafka, esto se logra con productores idempotentes y transacciones.

En Go, al trabajar con Kafka (por ejemplo, usando la biblioteca sarama), se puede configurar un productor para envíos idempotentes y usar transacciones para garantizar "exactly once". Por defecto, generalmente se usa "al menos una vez".

Ejemplo de configuración de un productor idempotente en Go con sarama:

config := sarama.NewConfig()
config.Producer.Idempotent = true
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Retry.Max = 5

producer, err := sarama.NewSyncProducer(brokers, config)
if err != nil {
    panic(err)
}
// Luego enviamos mensajes a través del productor