[Kafka] backoff

이보석·2025년 9월 20일

arms

목록 보기
3/4

Kafka Retry Management

Kafka Producer는 메시지를 브로커로 보내는 과정에서 다양한 단계로 처리된다.
이 과정에서 재시도(Retries)Backoff는 메시지 전송 실패 시 안정성을 확보하는 핵심 메커니즘이다.


Kafka 메시지 전송 단계

  1. send() 호출

    • 사용자가 producer.send(record)를 호출하면 메시지 전송이 시작됨.
  2. Batching

    • 같은 파티션 메시지를 묶어 배치를 생성.
    • 네트워크 효율성을 높이고 처리량 향상.
  3. AwaitSend / RecordAccumulator

    • 배치가 전송 조건(배치 크기, linger.ms 등)을 만족할 때까지 대기.
  4. Inflight

    • 배치를 브로커로 전송하고, ack를 기다림.
    • 동시에 전송 가능한 요청 수는 max.in.flight.requests.per.connection으로 제한됨.
  5. Retries

    • 전송 실패 시 재시도 수행.
    • 이 단계에서 Backoff가 적용되어, 재시도 사이에 일정 시간 대기.

backoff

Backoff는 실패한 요청을 즉시 재시도하지 않고, 일정 시간 대기한 후 재시도하는 기법이다.
이 방식은 시스템 부하를 줄이고, 일시적인 오류(네트워크 지연, 브로커 과부하, 외부 서비스 장애 등)가 복구될 시간을 확보할 수 있게 해준다.

이미지에서 보듯, 재시도 횟수가 증가할수록 대기 시간도 점차 늘어나며 단계적으로 재시도가 수행된다.

  • 첫 번째 재시도: 짧은 시간 대기
  • 두 번째 재시도: 더 긴 시간 대기
  • 세 번째 이후 재시도: 대기 시간 점진적 증가

Backoff 전략

  • Fixed Backoff: 매번 동일한 대기 시간을 둠
  • Exponential Backoff: 재시도할 때마다 대기 시간을 배로 늘림
  • Jitter 추가: 여러 클라이언트가 동시에 재시도하는 상황 방지

Kafka에서의 적용

Kafka Producer/Consumer는 재시도와 backoff 관련 설정을 제공한다.

  • retry.backoff.ms: 재시도 간격(ms)
  • delivery.timeout.ms: 메시지 전송 전체 허용 시간
  • Consumer는 max.poll.interval.ms 등과 조합하여 안정적인 재시도 정책 구성 가능

예시 시나리오

  • 즉시 재시도: 네트워크 문제 발생 시 수만 건 요청이 몰리며 장애 심화
  • Backoff 적용: 100ms → 200ms → 400ms … 단계적 재시도로 브로커 회복 시간 확보, 안정적인 메시지 처리 가능

💡 결론
Kafka Producer에서 Retries 단계에 Backoff를 적용하면, 시스템 과부하를 줄이고 안정성을 높일 수 있다.

0개의 댓글