이 문서는 데이터 엔지니어링 섹션의 일부입니다.
Structured Streaming이란?
💡 Structured Streaming 은 Apache Spark의 스트림 처리 엔진 으로, 끊임없이 들어오는 데이터를 마치 테이블에 계속 행이 추가되는 것처럼 처리합니다. 배치 처리와 동일한 DataFrame API를 사용하므로, 배치 코드를 거의 그대로 스트리밍으로 전환할 수 있습니다.
왜 Structured Streaming이 필요한가요?
전통적인 배치 처리는 데이터를 일정 주기(예: 매시간, 매일) 로 모아서 처리합니다. 하지만 실시간 대시보드, 이상 거래 탐지, IoT 센서 모니터링 같은 시나리오에서는 데이터가 도착하는 즉시 처리해야 합니다.
Structured Streaming은 마이크로 배치(기본) 와 연속 처리 모드를 모두 지원하여, 요구사항에 맞는 지연 시간을 선택할 수 있습니다.
핵심 개념: 무한 테이블 (Unbounded Table)
Structured Streaming의 핵심 아이디어는 스트림 데이터를 끝없이 행이 추가되는 테이블 로 모델링하는 것입니다.새로운 데이터가 도착할 때마다 입력 테이블에 행이 추가되는 무한 테이블 모델입니다.새로운 데이터가 도착할 때마다 입력 테이블에 행이 추가되고, Spark는 증분(Incremental) 으로 쿼리를 실행하여 결과 테이블을 갱신합니다.
readStream / writeStream API
스트림 읽기 (readStream)
스트림 쓰기 (writeStream)
출력 모드 (Output Mode)
트리거 모드 (Trigger)
트리거는 얼마나 자주 새 데이터를 처리할지 를 결정합니다.
💡 availableNow vs 배치: availableNow는 배치처럼 동작하지만, 체크포인트를 유지 하여 이전에 처리한 데이터를 다시 처리하지 않습니다. 정기적으로 Lakeflow Jobs로 스케줄링할 때 매우 유용합니다.
워터마크와 Late Data 처리
스트림 데이터는 네트워크 지연, 시스템 장애 등으로 인해 늦게 도착 할 수 있습니다. 워터마크(Watermark)는 얼마나 늦은 데이터까지 허용할지 를 정의합니다.워터마크 동작 원리
스트림 조인
스트림-스태틱 조인
스트림 데이터와 정적 테이블(Dimension 테이블) 을 조인합니다. 가장 일반적인 패턴입니다.스트림-스트림 조인
두 개의 스트림을 조인합니다. 워터마크가 필수 이며, 시간 범위 조건을 지정해야 합니다.체크포인트 관리
체크포인트는 스트리밍 쿼리의 진행 상태(오프셋, 상태 정보) 를 저장하여, 장애 발생 시 마지막 처리 지점부터 재개 할 수 있게 합니다.외부 소스 연동
Structured Streaming은 다양한 메시지 브로커와 연동할 수 있습니다.foreachBatch 패턴
foreachBatch를 사용하면 각 마이크로 배치에 대해 임의의 DataFrame 연산 을 수행할 수 있습니다. MERGE(Upsert), 다중 출력 등 복잡한 로직에 적합합니다.
모니터링
주요 모니터링 메트릭
💡 StreamingQueryListener를 활용하면 커스텀 모니터링(Slack 알림, 메트릭 수집 등)을 구현할 수 있습니다. 자세한 내용은 Streaming 심화를 참고하시기 바랍니다.