[Spark] Spark Streaming _TIL

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을 사용하는 점이 다름
  • 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