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.
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>>.
SendResultinnehållerRecordMetadata(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: 2Avvä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 enCompletableFuture<SendResult>.- Använd
whenCompleteför att granska metadata eller fel. acksstyr avvägningen mellan varaktighet och fördröjning.- Samla callbacks för enhetlig tillförlitlig felhantering.
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
- Integrera Spring Kafka Starter
- Skicka meddelanden med KafkaTemplate
- Anpassa producentkonfigurationer
- Hantera callbacks och bekräftelser vid producentanrop