

batch.size: 배치 크기. 배치가 다 차면 바로 전송linger.ms: 전송 대기 시간. (기본값 0)producer.send(new ProducerRecode<>("simple", "value"));
Future<RecordMetadata> f = producer.send(new ProducerRecord<>("topic", "value"));
try {
RecordMetadata meta = f.get(); // blocking
} catch (ExecutionException e) {
}
producer.send(new ProducerRecord<>("topic", "value"),
new Callback() {
@Override
public void onCompletion(RecordMetadata metadata, Exception e) {
}
}
);
acks = 0acks = 1acks = all (or -1)min.insync.replicas 설정에 따라 달라짐min.insync.replicas (브로커 옵션)
예를 들어, 리플리카의 개수가 3이고 acks = all, min.insync.replicas = 2 일 땐 그림과 같이 리더에 저장하고 팔로워 중 한 개에 저장하면 성공 응답을 보내준다.
다른 예시로, 리플리카의 개수가 3이고 acks = all, min.insync.replicas = 1인 경우 리더에 저장되면 성공 응답을 보내준다. acks = 1과 동일하게 작동하여 리더 장애시 메시지의 유실 가능성이 있다.
리플리카의 개수가 3이고 acks = all, min.insync.replicas = 3인 경우 리더와 팔로워 2개에 저장되면 성공 응답을 보내준다. 팔로워 중 한 개라도 장애가 나면 리플리카 부족으로 항상 저장에 실패하게 된다.
min.insync.replicas 옵션은 리플리카의 개수와 동일하게 지정하면 안된다.
재시도 가능한 에러는 재시도를 처리한다.
retries 속성send() 메서드에서 Exception 발생 시 예외 타입에 따라 send() 재호출send() 재호출send() 메서드에서 Exception 발생 시send() 메서드에서 전달한 콜백에서 Exception 받는 경우send() 메서드가 리턴한 Future의 get() 메서드에서 Exception 발생 시
enable.idempotence 속성을 사용하면 중복 전송 가능성을 줄일 수 있다.
max.in.flight.requests.per.connection