Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) · Lektion

Hantera callbacks och bekräftelser vid producentanrop

Lär Er reagera på resultatet av asynkrona Kafka-sändningar med callbacks, CompletableFuture och acks-konfiguration för att garantera tillförlitlig leverans.

Lektion 4 av 413 steg

Hantera callbacks och bekräftelser vid producentanrop är en gratis lektion i Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka), och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) innehåller totalt 4 lektioner.

Varför sändningsresultat är viktiga

När ni anropar KafkaTemplate.send() skickas meddelandet asynkront. Anropet returnerar omedelbart, men brokern kan ännu inte ha lagrat posten.

För att bygga tillförlitliga producenter måste ni granska resultatet av varje sändning, så att ni kan logga, försöka igen eller larma vid fel.

Resultatet CompletableFuture

I Spring Kafka returnerar send() en CompletableFuture<SendResult<K,V>>.

  • SendResult innehåller RecordMetadata (partition, offset och tidsstämpel).
  • Ni kopplar en fortsättning för att hantera lyckade och misslyckade resultat.
CompletableFuture<SendResult<String,String>> future =
    kafkaTemplate.send("orders", order.getId(), payload);

Koppla till whenComplete

Använd whenComplete för att hantera båda utfallen på samma ställe. Det första argumentet är resultatet och det andra är undantaget (null vid framgång).

future.whenComplete((result, ex) -> {
    if (ex == null) {
        var md = result.getRecordMetadata();
        log.info("Sent to partition {} offset {}", md.partition(), md.offset());
    } else {
        log.error("Send failed", ex);
    }
});

Läsa RecordMetadata

Vid framgång visar RecordMetadata exakt var posten hamnade.

  • partition() — vilken partition som tog emot den.
  • offset() — dess position i partitionen.
  • timestamp() — tidsstämpeln som tilldelades av brokern.
RecordMetadata md = result.getRecordMetadata();
String location = md.topic() + "-" + md.partition() + "@" + md.offset();

Blockera i väntan på resultatet

Ibland behöver ni en synkron garanti. Anropa get() med en timeout för att blockera tills brokern bekräftar mottagandet.

Använd detta sparsamt — det försämrar genomströmningen, men är användbart i tester eller vid kritiska skrivningar.

SendResult<String,String> result =
    kafkaTemplate.send("orders", payload).get(10, TimeUnit.SECONDS);

Konfigurationen acks

Bekräftelsens varaktighet styrs av producentinställningen acks:

  • acks=0 — skicka och glöm, utan garanti.
  • acks=1 — ledaren skriver och bekräftar sedan.
  • acks=all — ledaren och alla synkroniserade repliker bekräftar.

Konfigurera acks i Spring Boot

Ställ in den starkaste varaktighetsgarantin med acks=all i application.yml.

spring:
  kafka:
    producer:
      acks: all
      properties:
        min.insync.replicas: 2

Avvägning: fördröjning kontra varaktighet

Starkare acks innebär högre fördröjning.

  • acks=0 är snabbast men data går förlorade om brokern slutar fungera.
  • acks=all är säkrast men väntar på bekräftelse från replikerna.

Välj all för finansiella händelser. För mätvärden med hög volym kan 1 vara tillräckligt.

Samla callback-logiken

Undvik att duplicera callback-kod. Omge sändningarna med en hjälparmetod som alltid loggar metadata och fel på ett enhetligt sätt.

public void sendTracked(String topic, String key, String value) {
    kafkaTemplate.send(topic, key, value)
        .whenComplete((res, ex) -> {
            if (ex != null) metrics.incrementFailures();
            else metrics.incrementSuccess();
        });
}

Hantera fel på ett robust sätt

I felgrenen kan ni:

  • Spara den misslyckade nyttolasten i ett reservlager.
  • Öka ett felmätvärde för larm.
  • Planera ett nytt försök i en separat executor.

Ignorera aldrig undantaget i tysthet.

Sätta ihop allt

En robust producent kombinerar acks=all, granskning av callbacks och felhantering. Det ger observerbarhet och leveransgarantier utan att blockera huvudflödet.

future.whenComplete((res, ex) -> {
    if (ex != null) deadLetterStore.save(payload);
});

Snabb kontroll

Testa er förståelse av producentbekräftelser.

Sammanfattning

Ni har lärt er att hantera det asynkrona resultatet från Kafka-sändningar.

  • send() returnerar en CompletableFuture<SendResult>.
  • Använd whenComplete för att granska metadata eller fel.
  • acks styr avvägningen mellan varaktighet och fördröjning.
  • Samla callbacks för enhetlig tillförlitlig felhantering.
Gratis att börja

Lär dig Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Hantera callbacks och bekräftelser vid producentanrop” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka), inklusive ”Hantera callbacks och bekräftelser vid producentanrop”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantera callbacks och bekräftelser vid producentanrop”?

Lär Er reagera på resultatet av asynkrona Kafka-sändningar med callbacks, CompletableFuture och acks-konfiguration för att garantera tillförlitlig leverans. Ni övar på Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka)?

Du behöver inga förkunskaper. Utbildningen i Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka) på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Hantera callbacks och bekräftelser vid producentanrop”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka)-lektionen?

Ja. Varje Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka)-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Integrera Spring Kafka Starter
  2. Skicka meddelanden med KafkaTemplate
  3. Anpassa producentkonfigurationer
  4. Hantera callbacks och bekräftelser vid producentanrop
← Tillbaka till Avancerad Spring Boot 4: händelsestyrd arkitektur (Kafka)