본문 바로가기
kafka/core

Producer의 전송/재전송 내부 메커니즘 및 전송 동작 관련 주요 파라미터의 이해

by 개복이 2025. 5. 5.

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 시도하지 않는다.

댓글