목록 보기
카프카 컨슈머에 동적 쓰로틀링 적용하기
백엔드

카프카 컨슈머에 동적 쓰로틀링 적용하기

우아한 형제들
우아한 형제들
2025년 1월 9일

두줄요약

카프카 컨슈머 처리량을 외부 DB 부하에 맞춰 동적으로 조절하는 방법을 다뤘습니다. Thread.sleep()의 한계와 pause()/resume()을 활용한 리밸런싱 회피 방식을 설명했습니다.

핵심 내용

  • Kafka 스프링 환경에서 컨슈머 처리량을 외부 DB/ API 부하를 넘지 않는 선에서 동적으로 조절하는 쓰로틀링 기법 소개
  • 컨슈머 수 증가만으로 랙을 해소할 때의 한계, 리밸런싱과 외부 시스템 과부하 위험을 문제로 제시
  • CPU 사용률을 모니터링해 지연 시간을 계산하고, Thread.sleep()과 pause()/resume() 방식으로 적용하는 흐름 설명

주의할 점

  • Thread.sleep()은 poll 지연으로 리밸런싱을 유발할 수 있어 max.poll.interval.ms와 처리 시간을 함께 고려해야 함
  • ConcurrentMessageListenerContainer 사용 시 외부 컨테이너 전체가 아닌 실제 파티션 할당 컨테이너 단위로 pause 적용 필요
  • CPU 사용률 외에도 메모리, 커넥션 등 외부 시스템 한계를 함께 고려해야 함

적용해볼 점

  • 외부 시스템 부하를 기준으로 지연 시간을 계산하는 동적 쓰로틀링 로직 설계
  • 리밸런싱을 피해야 하는 환경에서는 pause()/resume() 기반 제어 우선 검토
  • CPU/리소스 지표를 연결해 자동으로 소비 속도를 조절하는 운영 방식 검토

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...