Skip to main content
이 문서는 데이터 엔지니어링 섹션의 일부입니다.

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 심화를 참고하시기 바랍니다.

모범 사례


더 알아보기


정리


참고 링크