Why We Ditched Flink Table API Joins: Cutting State by 75% with DataStream Unions

Author: Maryna Kryvko | Source: Zalando Engineering Blog | Published: 2026-03-04


한 줄 요약

Zalando는 Flink Table API의 조인 체이닝이 상태를 기하급수적으로 증가시킨다는 사실을 발견하고, DataStream API의 단일 KeyedProcessFunction으로 마이그레이션하여 상태 크기를 76% 줄이고 스냅샷 시간을 77% 단축했다.

핵심 주장/내용

  • Table API의 4개 조인 체이닝 시 상태가 “추가”가 아닌 “곱셈”으로 증가 — 각 조인 연산자가 중복 데이터 저장
  • 235~245GB 상태로 CPU 고갈, 백프레셔, 크래시-재시작 루프, 1시간 SLA 위협 발생
  • 해결: MultiStreamJoinProcessor — RocksDB에 SKU별 enrichment 상태 1개 인스턴스만 유지하는 단일 KeyedProcessFunction
  • SQL의 쿼리 최적화 포기 대신 수동 스트림 처리로 중복성 제거
  • Flink 2.1이 동일 문제를 해결하는 실험적 “Multi-Way Join Operator”를 도입하여 설계 결정 사후 검증

주요 수치 / 사실

  • 상태 크기: 235GB → 56GB (-76%)
  • 스냅샷 시간: 11분 → 2.5분 (-77%)
  • CPU 사용률: 100%(급등) → ~30%(안정)
  • AWS 비용: 13% 절감

관련 위키


Source: 원문 보기