Producer의 전송/재전송 내부 메커니즘 및 전송 동작 관련 주요 파라미터의 이해
Producer의 메시지 전송/재전송 시간 파라미터 이해
- max.block.ms
- send() 호출 시 Record Accumulator에 입력하지 못하고 block되는 최대 시간. 초과 시 Timeout Exception 발생
- send() 메서드를 통해 Record Accumulator에 입력하는 데 Record Accumulator가 꽉차거나해서 더이상 입력할 수 없을 때 block 되는 최대 시간
- linger.ms : Sender Thread가 Record Accumulator에서 배치별로 가져가기 위한 최대 대기 시간.
- request.timeout.ms
- 전송에 걸리는 최대 시간. 전송 재시도 대기시간 제외. 초과 시 retry를 하거나 Timeout Exception 발생
- request.timeout.ms 초과 시 retry.backoff.ms 만큼 대기하였다가 재전송
- Error 일 시 바로 Error 리턴
- retry.backoff.ms : 전송 재시도를 위한 대기 시간.
- delivery.timeout.ms
- Producer 메시지(배치) 전송에 허용된 최대 시간. 초과 시 Timeout Exception 발생
- delivery.timeout.ms >= linger.ms + request.timeout.ms
Producer의 메시지 재전송 - retries와 delivery.timeout.ms
- retries = 2147483647 (MAX_INT), delivery.timeout.ms = 120000
- retries와 delivery.timeout.ms를 이용하여 재전송 횟수 조정.
- retries는 재전송 횟수를 설정.
- delivery.timeout.ms는 메시지 재전송을 멈출때 까지의 시간. retries 설정 횟수만큼 재전송 시도하다가 delivery.timeout.ms가 되면 재전송 중지
- 보통 retries는 무한대값으로 설정하고 delivery.timeout.ms(기본 120000, 즉 2분)를 조정하는 것을 권장
Producer의 메시지 재전송 - retries와 request.timeout.ms, retry.backoff.ms
- retries = 10, retry.backoff.ms = 30, request.timeout.ms = 10000ms
- retry.backoff.ms는 재전송 주기 시간을 설정.
- retries = 10, request.timeout.ms = 10000ms, retry.backoff.ms = 30인 경우 request.timeout.ms 기다린 후 재전송하기 전 30ms 이후 재전송 시도. 이와 같은 방식으로 재전송을 10회 시도하고 더이상 retry 시도 하지 않는다.
- 만약 10회 이내에 delivery.timeout.ms에 도달하면 더 이상 retry 시도하지 않는다.
'kafka > core' 카테고리의 다른 글
Producer의 동기(Sync)와 비동기(Async)에서 배치 전송 차이 (0) | 2025.05.04 |
---|---|
Producer의 메시지 배치 전송 내부 메커니즘 - linger.ms와 batch.size (0) | 2025.04.30 |
Producer의 메시지 배치 전송 내부 메커니즘 - Record Batch와 Record Accumulator 이해 (0) | 2025.04.29 |
acks 값 설정에 따른 Producer의 전송 방식 차이 이해 (0) | 2025.04.28 |
kafka-dump-log 명령어로 로그 파일의 메시지 내용 확인 (0) | 2025.04.28 |
댓글