주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 65일차 TIL 본문

데브코스

데이터 엔지니어링 65일차 TIL

우솨 2024. 6. 30. 10:24

학습 내용

Spark 3.0의 구성

 

Spark Streaming이란?
- 실시간 데이터 스트림 처리를 위한 spark API
- Kafka, Kinesis, Flume, TCP 소켓 등의 다양한 소스에서 발생하는 데이터 처리 가능
- Join, Map, Reduce, Window와 같은 고급 함수 사용 가능

Spark Streaming 동작방식
- 데이터를 마이크로 배치로 처리
- 계속해서 위의 과정을 반복(루프)
- 이렇게 읽은 데이터를 앞서 읽은 데이터에 머지
- 배치마다 데이터 위치 관리(시작과 끝)
- Fault Tolerance와 데이터 재처리 관리(실패시)

Spark Streaming의 내부 동작
- Spark Streaming은 실시간 입력 데이터 스트림을 배치로 나눈다음
- Spark Engine에서 처리하여 최종 결과 스트림을 일괄적으로 생성
        - DStream과 Structured Streaming 두 종류가 존재


Source & Sink
- 소스와 싱크는 외부 시스템(소스)에서 스트리밍 데이터를 수집하고 처리된 데이터를 외부 시스템(싱크)으로 출력하는 것을 용이하게 하는 구성요소

Source
- Source는 Kafka, Amazon kinesis, Apache Flume, TCP/IP 소켓, HDFS, File 등을 Spark Structured Streaming에서 처리할 수 있도록 해줌
        - 결국 Spark DataFrame으로 변환 해줌
        - ex) Kafka에서 Spark Structured Streaming으로 데이터를 수집하는 경우, Kafka Source를 사용하여 Kafka 클러스터에서 하나 이상의 토픽에서 데이터를 가져와 DataFrame으로 변환 가능
- Spark DataFrame과 비교하면 readStream을 사용하는점이 다르다.

Sink
- Sink는 Spark Structured Streaming에서 처리된 데이터를 외부 시스템이나 스토리지로 출력 가능하게 해줌
- Sink는 변환되거나 집계된 데이터가 어떻게 쓰이거나 소비되는지를 정의
        - Source와 마찬가지로, Sink는 Kafka, HDFS, Amazon S3, Apache Cassandra, JDBC 데이터베이스 등과 같은 다양한 대상에 대해 사용 가능
        - ex) Kafka Sink를 사용하여 Spark Structured Streaming에서 처리된 데이터를 Kafka Topic으로 쓰는 것이 가능하다.
- OutputMode : 현재 Micro Batch의 결과가 Sink에 어떻게 쓰일지 결정
        - Append
        - Update : UPSERT 같은 느낌
        - Complete : FULL REFRESH 같은 느낌

Micro Batch Trigger Option
- Unspecified : 디폴트 모드, 현재 Micro Batch가 끝나면 다음 Batch가 바로 시작
- Time Interval : 고정된 시간마다 Micro Batch를 시작, 현재 Batch가 지정된 시간을 넘어서 끝나면 끝나자마자 다음 Batch가 시작됨. 읽을 데이터가 없는 경우 시작되지 않음
- One Time => Available-Now : 지금 있는 데이터를 모두 처리하고 중단
- Continuous : 새로운 저지연 연속 처리모드에서 실행 , 아직 베타/실험버전

Spark Structured Streaming Sink의 outputMode값