TL;DR — 제출이 몰릴 때 채점 대기열이 쌓이는데, CPU/메모리 기반 오토스케일은 이미 쓴 자원만 보여 대기열(미처리 수요)을 제때 못 읽는다. KEDA로 제어지표를 Kafka Consumer Lag로 바꿔, 언어별 채점 워커를 미처리 적재량에 따라 수평 확장했다.
submission-* 토픽으로 보내면 언어별 채점 워커(C·C++·C#·Java·Python)가 소비·채점KEDA ScaledObject로 언어별 채점 워커를 Kafka Consumer Lag 트리거로 수평 확장.
triggers:
- type: kafka
metadata:
consumerGroup: csharp-judge-group
topic: submission-CS
lagThreshold: "5" # 파티션당 lag이 임계값 초과하면 확장
minReplicaCount: 1
maxReplicaCount: 10
pollingInterval: 15 # 15초마다 lag 폴링
cooldownPeriod: 60
# scaleUp: 30초당 최대 3파드, scaleDown: 60초당 1파드
consumerGroup·topic 분리lagThreshold: 3, 상대적으로 처리가 더 걸리는 Python·C++·C#는 5. 즉 처리가 빠른 언어일수록 더 민감하게(낮은 임계값) 확장정정 메모: 이 임계값은 yaml에 고정값으로 설정한 것이고, "목표 대기시간 ÷ 평균 처리시간"으로 런타임에 자동 산정하는 로직이 구현돼 있는 것은 아니다. (그 계산식은 임계값을 정할 때의 설계 근거로 활용)