Milyen kézbesítési garanciát támogat, ha a Kafka-ról beszélünk?
sobes.tech MI
Válasz az MI-től
Kafka-ban három fő szintű üzenetkézbesítési garanciát lehet biztosítani:
-
Legfeljebb egyszer (nem több mint egyszer) — az üzenet 0 vagy 1 alkalommal kerülhet kézbesítésre. Előfordulhat üzenetvesztés, például ha a megerősítés előtt történik hiba.
-
Legalább egyszer (legalább egyszer) — az üzenet garantáltan kézbesítésre kerül, de többször (duplikátumok) is kézbesíthető. Ezt a brokerek megerősítései és szükség esetén újraküldése biztosítja.
-
Pontosan egyszer (pontosan egyszer) — a legszigorúbb garancia, amikor az üzenet pontosan egyszer kerül kézbesítésre és feldolgozásra. Kafka-ban ezt idempotens termelők és tranzakciók segítségével érik el.
Go-ban Kafka-val való munkavégzés során (például a sarama könyvtár segítségével) konfigurálhatunk idempotens küldést, és tranzakciókat használhatunk a "pontosan egyszer" garancia biztosítására. Alapértelmezés szerint általában "legalább egyszer" van használatban.
Példa egy idempotens producer konfigurálására Go-ban a sarama-val:
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)
}
// Ezután üzenetek küldése a producer segítségével