Spark Streaming 소개
- Spark Streaming이란?
- 실시간 데이터 스트림 처리를 위한 Spark API
- Kafka, Kinesis, Flume, TCP 소켓 등의 다양한 소스에서 발생하는 데이터 처리 가능
- Join, Map, Reduce, Window와 같은 고급 함수 사용 가능
- Spark Streaming 동작방식
- 데이터를 마이크로 배치로 처리
- 계속해서 위의 과정을 반복(루프)
- 이렇게 읽은 데이터를 앞서 읽은 데이터에 merge
- 배치마다 데이터 위치 관리 (시작과 끝)
- Falut Tolerance와 데이터 재처리 관리 (실패 시)
- Spark Streaming의 내부 동작
- Spark Streaming은 실시간 입력 데이터 스트림을 배치로 나눈 다음
- Spark Engine에서 처리하여 최종 결과 스트림을 일괄적으로 생성
- DStream(RDD기반)과 Structured Streaming 두 종료가 존재
DStream | Structured Streaming |
RDD기반 스트리밍 처리 | DataFrame기반 스트리밍 처리 |
Spark SQL 엔진의 최적화 기능 사용불가 | Catayst 기반 최적화 혜택을 가져감 |
이벤트 발생 시간 기반 처리 불가 | 이벤트 발생 시간 기반을 처리 가능 |
개발이 중단된 상태 (RDD기반 모두에 적용됨) | 계속해서 기능이 추가되고 있음 |
- Source & Sink
- 소스와 싱크는 외부 시스템(소스)에서 스트리밍 데이터를 수집하고 처리된 데이터를 외부 시스템(싱크)로 출력하는 것을 용이하게 하는 구성 요소
- Source
- Kafka, Amazon Kinesis, Flume, TCP, HDFS 등을 Spark Structured Streaming에서 처리할 수 있도록 해줌
- 결국 Spark DataFrame과 비교하면 readStream을 사용하는 점이 다름
- Spark DataFrame과 비교하면 readStream을 사용하는 점이 다름
- Kafka, Amazon Kinesis, Flume, TCP, HDFS 등을 Spark Structured Streaming에서 처리할 수 있도록 해줌
- Sink
- Spark Structured Streaming에서 처리된 데이터를 외부 시스템이나 스토리지로 출력 가능하게 해줌
- Sink는 변환되거나 집계된 데이터가 어떻게 쓰이거나 소비되는지를 정의
- Source와 마찬가지로 Kafka, HDFS, S3... 등과 같은 다양한 대상에 대해 사용 가능
- 예) Kafka Sink를 사용하여 Spark Structured Streaming에서 처리된 데이터를 Kafka Topic으로 쓰는 것이 가능
- OutputMode: 현재 Micro Batch의 결과가 Sink에 어떻게 쓰일지 결정
- Append
- Update: UPSERT 같은 느낌
- Complete: FULL Refresh 같은 느낌
#sample code
word_count_query = counts_df.writeStream\
.format("console")\
.outputMode("complete")\
.option("checkpointLocation","chk-point-dir")\
.start()
- Micro Batch Trigger Option
- Unspecified: 디폴트 모드, 현재 Micro Batch가 끝나면 다음 Batch가 바로 시작
- Time Interval: 고정된 시간마다 Micro Batch를 시작, 현재 Batch가 지정된 시간을 넘어서 끝나면 끝나자마자 다음 Batch가 시작됨. 읽을 데이터가 없는 경우 시작되지 않음
- One Time => Available-Now: 지금 있는 데이터를 모두 처리하고 중단
- Continuous: 새로운 저지연 연속 처리모드에서 실행. 아직 베타/실험 버전
'Programmers TIL' 카테고리의 다른 글
[Kafka] Kafka 중요 개념 _TIL (0) | 2023.07.12 |
---|---|
[Kafka] Kafka 아키텍처 _TIL (0) | 2023.07.12 |
[Kafka] Kafka 역사와 소개 _TIL (0) | 2023.07.12 |
[Spark] Spark SQL _TIL (0) | 2023.07.05 |
[Spark] Spark 프로그램 구조 _TIL (0) | 2023.07.04 |