Kafka Streams의 k8s 마이그레이션: KEDA와 Consumer Lag 기반 스케일링으로 비용 80% 절감
핵심 내용
AWS EC2 기반 Kafka Streams 애플리케이션을 Kubernetes로 이전하며 KEDA와 Consumer Lag 기반 스케일링을 적용해 인프라 비용을 80% 이상 절감했다.
자세히 보기
AWS EC2에서 운영되던 Log Transformer(Kafka Streams 애플리케이션)를 Kubernetes(k8s)로 마이그레이션하면서, Kafka consumer 워크로드에 최적화된 스케일링 설계를 통해 인프라 비용을 80% 이상 절감했다.
CPU 기반 HPA의 한계와 해결
기존 EC2 환경은 ASG의 cron 스케줄에 의존해 트래픽 변화에 즉각 반응하기 어려웠다. k8s 도입 초기에는 CPU 기반 HPA(Horizontal Pod Autoscaler)를 적용했으나, Kafka의 RangeAssignor 특성상 partition이 consumer에 고르게 분배되지 않아 부하가 집중된 pod가 있어도 평균 CPU는 임계값을 넘지 못해 스케일링이 작동하지 않았다.
KEDA와 Consumer Lag 기반 스케일링
실제 부하를 반영하는 지표인 Consumer Lag을 기준으로 스케일링하기 위해 KEDA(Kubernetes Event-Driven Autoscaling)를 도입했다. KEDA의 Kafka scaler는 consumer group의 lag 총량을 조회해 replica 수를 조절하므로, partition 분배 불균형과 무관하게 적절히 대응할 수 있다. 또한 데이터가 없는 시간대에는 pod 수를 0으로 줄이는 scale-to-zero 기능을 통해 idle 비용을 제거했다.
자정 트래픽 급증 대응 및 최적화
자정 일일 미션 초기화로 인한 트래픽 급증에 대응하기 위해 KEDA의 cron trigger를 활용해 미리 pod 수를 늘려두는 선제적 스케일링을 적용했다. 또한 pod당 thread를 다중화하여 JVM 오버헤드와 rebalance 이벤트를 줄임으로써 처리 지연을 최소화했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.