목차

프로듀서

Properties prop = new Properties();
prop.put("bootstrap.servers", "kafka01:9092,kafka01:9092,kafka01:9092");
prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 
KafkaProducer<Integer, String> producer = new KafkaProducer<>(prop);
 
producer.send(new ProducerRecord<>("topicname", "key", "value"));
producer.send(new ProducerRecord<>("topicname", "value"));
 
producer.close();

프로듀서의 기본 흐름

igma0k1.jpg

Sender의 기본 동작

aqcx5i7.jpg

처리량 관련 주요 속성

qty1a18.jpg

전송 결과 확인 안함

producer.send(new ProducerRecord<>("simple", "value"));

전송 결과 확인함: Future 사용

Future<RecordMetadata> f = producer.send(new ProducerRecord<>("topic", "value"));

try {
  RecordMetadata meta = f.get(); // 블로킹
} catch (ExecutionException ex) {

}

전송 결과 확인함: Callback 사용

producer.send(new ProducerRecord<>("simple", "value"),
  new Callback() {
    @Override
    public void onCompletion(RecordMetadata metadata, Exception ex) {
    }
  });

전송 보장과 ack

ack + min.insync.replicas

에러 유형

실패 대응 1 : 재시도

실패 대응 2 : 기록

재시도와 메시지 중복 전송 가능성

재시도와 순서

Refs


관련 문서