
백엔드
카프카 컨슈머에 동적 쓰로틀링 적용하기
두줄요약
카프카 컨슈머 처리량을 외부 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/리소스 지표를 연결해 자동으로 소비 속도를 조절하는 운영 방식 검토
