728x90
Producer 메시지 전송/재전송 시간 파라미터

- max.block.ms: Send() 호출 시 Record Accumulator에 입력하지 못하고 Block 되는 최대 시간. 초과 시 Timeout Exception
- linger.ms: Sender Thread가 Record Accumulator에서 배치별로 가져가기 위한 최대 대기시간
- request.timeout.ms: 전송에 걸리는 최대 시간. 전송 재시도 대기시간 제외.!
- 초과 시 retry를 하거나 timeout exception 발생
- retry.backoff.ms: 전송 재시도를 위한 대기 시간
- deliver.timeout.ms: Producer 메시지(배치) 전송에 허용된 최대 시간. 초과 시 Timeout Exception
Retries와 DeliveryTimeout

- retries와 delivery.timeout.ms를 이용하여 재전송 횟수 조정
- retries는 재전송 횟수를 설정
- delivery.timeout.ms는 메시지 재전송을 멈출 때까지의 시간
- 보통 retries는 무한대 값으로 설정하고 delivery.timeout.ms(default: 120,000)를 조정하는 것을 권장
Retries와 Request.timeout.ms, retry.backoff.ms

- retry.backoff.ms는 재전송 주기 시간을 설정
- retries=10, request.timeout.ms=10000ms, retry.backoff.ms=30인 경우 request.timeout.ms 만큼 기다린 후 재전송하기 전 30ms 이후 재전송 10회 시도.(이후에는 retry 시도 X)
- 만약 10회 이내 delivery.timeout.ms에 도달하면 더 이상 retry 시도하지 않음
실습하기
linger.ms + request.timeout.ms가 delivery.timeout 보다 작은 경우
Properties props = new Properties();
//Bootstrap.servers, key.serializer.class, value.serializer.class
//props.setProperty("bootstrap.servers", "192.168.56.101:9092");
props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.56.101:9092");
props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.setProperty(ProducerConfig.DELIVERY_TIMEOUT_MS_CONFIG, "29000");

- linger.ms + request.timeout.ms 보다 작게 설정했더니 Producer를 띄우지 못하고 죽는다.
delivery.timeout 설정 확인해보기
실행 중 brocker 죽이기

- Brocker가 죽었기 때문에 delivery.timeout.ms만큼 대기했다가 죽는 것을 볼 수 있다.
728x90
'카프카 > Java 기반 카프카 클라이언트 구현, Producer 내부 메커니즘 2' 카테고리의 다른 글
| Custom Partitioner로 메시지의 특정 Partition 설정하기 (0) | 2025.10.04 |
|---|---|
| idempotence(멱등성) 기반 중복 없이 전송 (0) | 2025.10.04 |
| Producer의 max.in.flight.request.per.connection의 이해 (0) | 2025.10.04 |
| Producer의 메시지 배치 전송 내부 메커니즘 (0) | 2025.09.29 |
| acks 값 설정에 따른 Producer의 전송 방식 차이 이해 (0) | 2025.09.29 |