Spark Streaming 소개와 Kafka 연동
Spark Streaming 소개
Spark
- 버클리 대학의 AMPLab에서 Apache 오픈소스 프로젝트로 2013년 시작
- 하둡의 뒤를 잇는 2세대 빅데이터 기술
- YARN 등을 분산환경으로 사용
- Scala로 작성됨
- 빅데이터 처리 관련 다양한 기능 제공
- 구성
- Spark Core, Spark SQL, Spark ML, Spark Streaming
Spark Streaming
- 실시간 데이터 스트림 처리를 위함 Spark API
- Kafka, Kinesis, Flume, TCP 소켓 등의 다양한 소스에서 발생하는 데이터 처리 가능
- Join, Map, Reduce, Window와 같은 고급 함수 사용 가능
Spark Streaming 동작 방식
- 데이터를 마이크로 배치로 처리하는 과정을 반복 (루프)
- 읽은 데이터를 앞서 읽은 데이터에 merge
- 배치마다 데이터 위치 관리 (시작과 끝)
- Fault Tolerance와 데이터 재처리 관리
Spark Streaming 내부동작
- Spark Streaming은 실시간 입력 데이터 스트림을 배치로 나눔
- Spark Engine에서 처리하여 최종 결과 스트림을 일괄적으로 생성
- DStream (RDD)과 Structured Streaming (DataFrame) 두 종류가 존재
Source & Sink
- 아래의 두 과정을 용이하게 해주는 구성 요소
- 외부 시스템 (Source)에서 스트리밍 데이터를 수집
- 처리된 데이터를 외부 시스템 (Sink)으로 출력
- Source
- Kafka, Amazon Kinesis, Apache Flume, HDFS 등을 Structured Streaming에서 처리할 수 있도록 해 줌
- 예) Kafka Source를 사용하여 Kafka 클러스터의 Topic에서 데이터를 DataFrame으로 변환 가능
- Sink
- Structured Streaming에서 처리된 데이터를 외부 시스템이나 스토리지로 출력 가능하게 해 줌
- Sink는 변환되거나 집계된 데이터가 어떻게 쓰이거나 소비되는지 정의
- 예) Kafka Sink를 사용하여 Structured Streaming에서 처리된 데이터를 Kafka Topic으로 쓰기 가능
- outputMode : Append, Update (UPSERT), Complete (Full Refresh)
Micro Batch Triggre Option
- Unspecified (default) : 현재 Micro Batch가 끝나면 다음 Batch가 바로 시작
- Time Interval
- 고정된 시간마다 Micro Batch 시작
- 지정된 시간을 넘어서 끝나면 바로 다음 Batch 실행
- 읽을 데이터가 없는 경우 시작되지 않음
- One time : 지금 있는 데이터를 모두 처리하고 중단
- Continuous : 새로운 저지연 연속 처리 모드에서 실행, 아직 베타/실험 버전
Streaming WordCount 예제 프로그램
WordCount 예제
- Spark에서 제공해 주는 예제 프로그램
- TCP 소켓에서 수신 대기 중인 데이터 서버로부터 수신한 텍스트 데이터의 단어 수 카운트
- 이를 위해 Netcat을 데이터 Producer로 사용
- Netcat Link
- ncat -lk 9999 : 해당 명령 이후의 텍스트는 모두 TCP 9999 포트로 보내짐
- Consumer 예제 코드
Spark Structured Streaming의 format 값
- parquet, json, csv, avro 등
- kafka
- memory
- console
- socket
Kafka Stream 예제 프로그램
Kafka와 Spark Streaming Diagram
fake_people에서 읽어 들이는 Kafka Stream
- fake_people Topic을 기준으로 가장 많은 title 열 개를 계산하는 예제
- 예제 코드
- 실행 준비 : spark.jars.packages를 설정
- SparkSession 생성 시 config로 지정
- spark-submit 실행 시 --packages 옵션 사용
- 옵션으로 지정할 값 찾기 (링크) : org.apache.spark:spark-sql-kafka-0-10_2.13:3.5.1
- 실행 준비 : spark.jars.packages를 설정
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql-kafka-0-10 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_2.13</artifactId>
<version>3.5.1</version>
<scope>test</scope>
</dependency>
강의 마무리
스트리밍 데이터 처리
- 배치 처리 vs 실시간 (스트리밍) 처리
- Kafka
- 대량의 실시간 데이터를 저장/처리하는 분산 스트리밍 플랫폼
- Topic -> Partition -> Segment
- Event/Message : Key, Value, Timestamp, Headers
- Producer, Brokers (Controller), Consumers
- Schema Registry, Connect, REST Proxy, ksqlDB, Kafka Streams 등
- Spark Streaming
- Micro-batch 형태로 데이터를 실시간 처리해 주는 Spark 확장 모듈
- Kafka의 Topic에서 데이터를 읽어 들여 데이터 변환, 집계, 필터링 등의 작업 수행 가능
- DStream이 아닌 Structured Streaming을 사용하는 것이 일반적
'[프로그래머스] 데이터 엔지니어링 데브코스 3기 > TIL(Today I Learn)' 카테고리의 다른 글
[TIL - 72일 차] 음식 배달에 걸리는 시간 예측하기 (1) (0) | 2024.07.02 |
---|---|
[TIL - 71일 차] 머신러닝 기초 (0) | 2024.07.01 |
[TIL - 69일 차] Kafka와 Spark Streaming 기반 스트리밍 처리 (4) (0) | 2024.06.28 |
[TIL - 68일 차] Kafka와 Spark Streaming 기반 스트리밍 처리 (3) (0) | 2024.06.26 |
[TIL - 67일 차] Kafka와 Spark Streaming 기반 스트리밍 처리 (2) (0) | 2024.06.25 |