¿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:
-
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.
-
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.
-
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