본문으로 건너뛰기

Bytewax Streaming KEDA Autoscaling (#1283 Gap 4 M3)

infra/keda/scaledobjects/bytewax-anomaly-scaledobject.yaml — Kafka consumer lag + CPU 기반 자동 수평 스케일링.

디자인 결정

1. 왜 2개 트리거 (lag + CPU)?

  • Kafka lag (primary): 실 트래픽 burst 감지. lag 100+ → scale-up
  • CPU (secondary): Bytewax 단일 instance 가 처리 한계 (CPU 70%+) 도달 시 scale-up
  • 둘 중 어느 쪽이든 활성화되면 KEDA 가 desired replicas 증가

2. 왜 min=1?

  • Kafka consumer 가 0 일 때 broker 가 lag metric 노출 안 함 → KEDA 가 scale 결정 불가
  • minReplicaCount: 1 cold consumer 안전망

3. 왜 cooldown=300s?

  • Bytewax flow 가 정상 종료 시 Kafka offset commit + 처리 중 메시지 완료 필요
  • scaleDown stabilization 300s (5분) — 진행 중 작업 보장
  • preStop hook (sleep 2s) 와 합쳐 graceful shutdown

ScaledObject 핵심

spec:
scaleTargetRef:
name: gend-streaming-anomaly
minReplicaCount: 1
maxReplicaCount: 4
pollingInterval: 15
cooldownPeriod: 300
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleUp:
stabilizationWindowSeconds: 60
policies: [{type: Pods, value: 1, periodSeconds: 60}]
scaleDown:
stabilizationWindowSeconds: 300
policies: [{type: Pods, value: 1, periodSeconds: 120}]
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus-server.monitoring.svc:80
query: kafka_consumergroup_lag{consumergroup="bytewax-anomaly"}
threshold: "100"
- type: prometheus
metadata:
query: avg(rate(container_cpu_usage_seconds_total{pod=~"gend-streaming-anomaly.*"}[5m])) * 100
threshold: "70"

종속성

  • KEDA operator (#1353): keda ns 에 Helm install
  • kafka-exporter (#1357): Prometheus 가 kafka_consumergroup_lag scrape 가능해야 함
  • Prometheus (monitoring/prometheus): ServiceMonitor 통해 kafka-exporter scrape

트러블슈팅

증상원인해결
HPA TARGETS <unknown>/100kafka-exporter 미배포#1357 PR infra/kafka-exporter/install.sh 실행
Scale-up 안 함 (lag 100+ 인데도)KEDA Operator → Prometheus 연결 실패kubectl logs -n keda keda-operator-* 에서 PromQL 에러 확인
Scale-down 너무 빠름cooldownPeriod 짧음cooldownPeriod: 600 으로 증가
Multiple pods 충돌 (offset duplicate)partition 수 < replicaCountKafka topic partition 수 ≥ maxReplicaCount 보장

관련

  • PR #1283, #1353
  • 의존: #1357 kafka-exporter
  • 참조 패턴: infra/keda/scaledobjects/trino-worker-scaledobject.yaml