
데브옵스
Kafka Streams를 k8s로 옮기며 얻은 스케일링 설계: 비용 80% 절감까지
두줄요약
EC2 기반 Kafka Streams를 k8s와 KEDA로 옮겨 consumer lag 중심 스케일링을 설계했습니다. 그 결과 트래픽에 맞는 운영과 80% 이상 비용 절감을 달성했습니다.
문제 상황
- EC2 기반 Kafka Streams 애플리케이션에서 피크 기준 72대 고정 운영으로 인한 과다 비용과 낮은 유연성
- CPU 기반 HPA가 partition 불균형과 consumer lag을 반영하지 못해 실제 처리 지연을 놓치는 문제
해결 방법
- Kafka consumer 워크로드를 topic별 독립 애플리케이션으로 분리하고, k8s로 마이그레이션
- KEDA의 Kafka scaler로 consumer lag 기반 스케일링을 적용하고, 자정 급증 구간은 cron trigger로 선제 확장
- pod 1대에 다중 thread를 두어 JVM 오버헤드와 rebalance 빈도를 줄이고, CPU 할당을 thread 단위로 맞춤
성능/운영 포인트
- 트래픽이 적은 시간대에는 scale down, 피크에는 scale out하는 방식으로 비용을 트래픽에 연동
- Helm chart와 ArgoCD로 설정 변경과 배포를 단순화
- partition과 thread 균등 분배 문제는 KEDA 옵션과 향후 개선 과제로 남음


