아파치 스파크 스트리밍

IT 위키

아파치 스파크 스트리밍(Apache Spark Streaming)은 아파치 스파크에서 제공하는 실시간 데이터 스트리밍 처리 기능이다. 대규모 실시간 데이터를 마이크로 배치(micro-batch) 단위로 처리하며, 고속 데이터 처리와 확장성을 동시에 제공한다.

1 개념[편집 | 원본 편집]

  • 스트리밍 데이터를 작은 배치 단위로 분할하여 처리
  • 실시간 데이터 수집 → 변환 → 분석 → 저장의 전 과정 지원
  • RDD 기반 처리 모델을 유지하되, 스트림 데이터에 맞춰 확장됨

2 구성 방식[편집 | 원본 편집]

스파크 스트리밍은 다음과 같은 방식으로 구현할 수 있다:

2.1 1. DStream API (Discretized Streams)[편집 | 원본 편집]

  • Spark 1.x~2.x에서 사용된 기존 스트리밍 방식
  • DStream은 시간 단위로 나눠진 RDD들의 시퀀스로 구성됨
  • 고수준 연산 지원: map, reduceByKey, join 등 RDD 연산 유사

2.2 2. Structured Streaming[편집 | 원본 편집]

  • Spark 2.0 이후 도입된 고수준 API 기반의 새로운 스트리밍 모델
  • DataFrame, Dataset 기반으로 동작
  • 지속적 쿼리 방식 (continuous query model)
  • 기존 Spark SQL, Catalyst Optimizer와 통합되어 더 강력한 최적화 지원
  • 정확히 한번 처리(exactly-once semantics) 보장

3 외부 대체 기술[편집 | 원본 편집]

아파치 스파크 스트리밍 외에도 실시간 처리를 위한 다음과 같은 대안들이 존재한다:

  • Apache Flink
    • 완전 event-driven 방식
    • true streaming model (배치 없음)
    • 상태 기반 처리에 강점
  • Apache Storm
    • 스파우트와 볼트(Spout & Bolt) 구조
    • 낮은 레이턴시, 높은 처리율 지향
    • 실시간 분석에 적합
  • Kafka Streams
    • Apache Kafka 위에서 동작하는 경량 스트리밍 라이브러리
    • 애플리케이션 내부에서 직접 실행 가능 (서버리스 구조)
    • 마이크로서비스 아키텍처에 적합

4 예시 (DStream 기반)[편집 | 원본 편집]

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

sc = SparkContext("local[2]", "NetworkWordCount")
ssc = StreamingContext(sc, 1)

lines = ssc.socketTextStream("localhost", 9999)
words = lines.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda w: (w, 1)).reduceByKey(lambda x, y: x + y)

wordCounts.pprint()
ssc.start()
ssc.awaitTermination()

5 비교 요약[편집 | 원본 편집]

시스템 처리 방식 언어/기반 처리 보장 특징
Spark DStream 마이크로 배치 RDD At least once 전통적인 구조, 단순
Structured Streaming 마이크로 배치 또는 Continuous DataFrame/Dataset Exactly once SQL과 통합, 권장 방식
Flink 이벤트 기반 Stream API Exactly once 진정한 스트리밍, 고도화된 상태 관리
Storm 이벤트 기반 Bolt/Spout At least once 낮은 지연 시간
Kafka Streams 이벤트 기반 Kafka 기반 Exactly once 서버리스, 마이크로서비스에 적합

6 같이 보기[편집 | 원본 편집]

7 참고 문헌[편집 | 원본 편집]

  • https://spark.apache.org/streaming/
  • Zaharia et al. (2013). Discretized Streams: Fault-Tolerant Streaming Computation at Scale
  • Spark: The Definitive Guide (O'Reilly)
  • Apache Flink, Storm, Kafka Streams 공식 문서