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 = 0
acks = 1
acks = 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