아파치 스파크 스트리밍
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 같이 보기[편집 | 원본 편집]
- 아파치 스파크
- Structured Streaming
- Discretized Streams
- Apache Kafka
- Apache Flink
- Apache Storm
- Kafka Streams
- RDD
- 데이터 스트리밍
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 공식 문서