Sobes.tech
Senior

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:

  1. 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.

  2. 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.

  3. 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