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: 원문 보기