생산자 전송 콜백과 승인 처리
콜백, CompletableFuture, 승인 설정을 사용하여 비동기 Kafka 전송 결과에 대응하고 전달 신뢰성을 보장하는 방법을 배우세요.
생산자 전송 콜백과 승인 처리은(는) CoddyKit의 무료 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
Why Send Results Matter
When you call KafkaTemplate.send(), the message is dispatched asynchronously. The call returns immediately, but the broker may not have stored the record yet.
To build reliable producers you must inspect the result of each send so you can log, retry, or alert on failures.
The CompletableFuture Result
In Spring Kafka, send() returns a CompletableFuture<SendResult<K,V>>.
SendResultholds theRecordMetadata(partition, offset, timestamp).- You attach a continuation to handle success or failure.
CompletableFuture<SendResult<String,String>> future =
kafkaTemplate.send("orders", order.getId(), payload);Attaching whenComplete
Use whenComplete to handle both outcomes in one place. The first argument is the result, the second is the exception (null on success).
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);
}
});Reading RecordMetadata
On success, RecordMetadata tells you exactly where the record landed.
partition()— which partition received it.offset()— its position in that partition.timestamp()— broker-assigned timestamp.
RecordMetadata md = result.getRecordMetadata();
String location = md.topic() + "-" + md.partition() + "@" + md.offset();Blocking for the Result
Sometimes you need a synchronous guarantee. Call get() with a timeout to block until the broker acknowledges.
Use this sparingly — it kills throughput, but it is useful in tests or critical writes.
SendResult<String,String> result =
kafkaTemplate.send("orders", payload).get(10, TimeUnit.SECONDS);The acks Configuration
Acknowledgment durability is controlled by the producer acks setting:
acks=0— fire and forget, no guarantee.acks=1— leader writes, then acknowledges.acks=all— leader plus all in-sync replicas acknowledge.
Configuring acks in Spring Boot
Set the strongest durability with acks=all in your application.yml.
spring:
kafka:
producer:
acks: all
properties:
min.insync.replicas: 2Trade-off: Latency vs Durability
Stronger acks mean higher latency.
acks=0is fastest but loses data on broker failure.acks=allis safest but waits for replica confirmation.
For financial events choose all; for high-volume metrics 1 may suffice.
Centralizing Callback Logic
Avoid duplicating callback code. Wrap sends in a helper method that always logs metadata and failures consistently.
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();
});
}Handling Failures Gracefully
In the failure branch you can:
- Persist the failed payload to a fallback store.
- Increment a failure metric for alerting.
- Schedule a retry on a separate executor.
Never swallow the exception silently.
Putting It Together
A robust producer combines acks=all, callback inspection, and failure handling. This gives you observability and delivery guarantees without blocking your main flow.
future.whenComplete((res, ex) -> {
if (ex != null) deadLetterStore.save(payload);
});Quick Check
Test your understanding of producer acknowledgments.
Recap
You learned to handle the asynchronous result of Kafka sends.
send()returns aCompletableFuture<SendResult>.- Use
whenCompleteto inspect metadata or failures. ackscontrols the durability vs latency trade-off.- Centralize callbacks for consistent reliability handling.
AI 튜터와 함께 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 12
- 레슨
- 48
자주 묻는 질문
“생산자 전송 콜백과 승인 처리” 강의는 무료인가요?
네 — “생산자 전송 콜백과 승인 처리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의 전체를 잠금 해제할 수 있습니다. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 총 4개의 강의가 포함되어 있습니다.
“생산자 전송 콜백과 승인 처리”에서 뭘 배우나요?
콜백, CompletableFuture, 승인 설정을 사용하여 비동기 Kafka 전송 결과에 대응하고 전달 신뢰성을 보장하는 방법을 배우세요. 브라우저에서 직접 실행하는 실습 코드로 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Advanced Spring Boot 4: Event-Driven Architecture (Kafka)을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“생산자 전송 콜백과 승인 처리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Spring Kafka Starter 통합
- KafkaTemplate으로 메시지 전송
- 생산자 구성 사용자 지정
- 생산자 전송 콜백과 승인 처리