Java Producer Client API 처리 로직 개요
KafkaProducer의 send()메서드 호출 프로세스
send()
메서드를 호출하여 메시지 전송을 시작하지만 바로 전송되지 않으며 내부 Buffer에 메시지를 저장 후에 별도의 스레드가 카프카 브로커에 실제 전송Producer와 브로커와의 메시지 동기화/비동기화 전송
KafkaProducer.send().get()
호출하여 브로커로 부터 Ack 메시지를 받을 때까지 대기(wait)함send()
메서드 호출 시에 callback 객체를 인자로 입력하여 Ack메시지를 Producer로 전달할 수 있음Future<RecordMetaData> = kafkaProducer.send(ProducerRecord객체)
→ 기본적으로 비동기 호출(RecordMetaData가 Ack를 가짐)
Future 객체의 get()
을 호출하여 브로커로 부터 메시지 Ack응답을 받을 때 까지 Main Thread를 대기 시키는 방식으로 동기화 구성
Producer와 브로커 메시지 동기화 코드1
Future<RecordMetaData> future = kafkaProducer.send();
RecordMetaData recordMetaData = future.get();
Producer와 브로커 메시지 동기화 코드2
RecordMetaData recordMetaData = kafkaProducer.send().get();
Callback
예시는 비동기 전송 예제
Key값을 가지는 메시지 전송