피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Kafka-K8s 타임아웃 정렬을 통한 월 $22,000 비용 절감 및 지연 해소
War Story: Debugging a Kafka 3.7 Consumer Lag Issue in K8s 1.32 with KEDA 2.14 and Prometheus 2.50
AI 요약
Context
Kafka 3.7, K8s 1.32, KEDA 2.14 기반의 결제 처리 시스템에서 갑작스러운 Consumer Lag 발생. 142개의 Pod가 동작함에도 불구하고 p99 Latency가 8.7초까지 치솟는 병목 현상 직면.
Technical Solution
- K8s Pod Graceful Shutdown 기간(30s)이 Kafka Session Timeout(45s)보다 짧아 발생하는 리밸런싱 무한 루프 식별
- Kafka Session Timeout을 60s로 상향 조정하여 Pod 종료 전 Broker가 세션 만료를 인지하도록 설계
- KEDA ScaledObject의 lagThreshold를 최적화하여 불필요한 과잉 프로비저닝 및 Pod Churn 억제
- KIP-429 Incremental Rebalance Protocol 활성화를 통한 리밸런싱 다운타임 최소화 구조 적용
- Prometheus Scrape Config 수정을 통해 KEDA Scale-out으로 생성된 Ephemeral Pod의 메트릭 누락 문제 해결
Impact
- 월 인프라 비용 $22,000 절감
- 리밸런싱 시간 12초에서 2.5초로 약 80% 단축
- 최대 12M 건의 Consumer Lag 해소 및 p99 Latency 정상화
Key Takeaway
분산 시스템의 안정성은 개별 컴포넌트의 성능보다 Kafka Broker, Consumer Client, K8s Lifecycle, Autoscaler 간의 타임아웃 설정 일관성에 의해 결정됨.
실천 포인트
- K8s Pod Termination Grace Period 대비 Kafka Session Timeout을 최소
1.5배 이상으로 설정했는지 검토 - KEDA 사용 시 Kafka
3.6+ 버전의 incrementalRebalance 옵션 활성화 여부 확인 - kube-state-metrics의 Label Scraping 설정이 동적 스케일링 Pod를 모두 포함하는지 검증