
데브옵스
Spark Connect on Kubernetes #1: 견고한 Spark Connect 만들기
두줄요약
Spark Connect를 멀티세션 서비스로 운영하며 생기는 단일 장애점과 리소스 경합 문제를 다뤘습니다. replica, Gateway, 부하 점수 기반 세션 배치로 안정성을 높인 과정을 정리했습니다.
문제 상황
- Spark Connect 서버 하나에 여러 세션이 붙으며 Driver 단일 장애점과 전 세션 동시 실패 위험 발생
- 무거운 작업이 Task 슬롯과 메모리를 공유해 다른 사용자 쿼리 지연, FIFO 스케줄링과 선점 부재로 경합 심화
- 고정된 서버 스펙과 세션 배치 한계로 부하 분산과 확장성 확보 어려움
원인 분석
- Spark 기본 설계가 앱 하나와 워크로드 하나를 전제해 멀티세션 서버와 맞지 않음
- executor 실패 카운터가 세션별이 아니라 서버 전체에 누적되어 임계치 초과 시 전체 종료
- Spark Connect에서 scheduler pool 전파 공백이 있어 모든 쿼리가 Default Pool로 몰림
해결 방법
- spark.executor.maxNumFailures를 사실상 비활성화하고 실패 기록은 주기적으로 비워 장기 누적 방지
- 여러 Spark Connect replica로 SparkContext를 분리해 장애 범위를 한 대로 축소
- Gateway를 두고 서버 부하 점수와 세션 수를 반영해 새 세션을 가장 한가한 서버로 배치