데이터 전처리: 데이터 수집 기법 – Flink)
ㅁ 데이터 수집 기법
1. Flink
ㅇ 정의:
실시간 데이터 스트리밍 및 배치 처리를 모두 지원하는 오픈소스 분산 처리 프레임워크로, 대규모 데이터 파이프라인 구축에 활용됨.
ㅇ 특징:
– 이벤트 기반 스트리밍 처리에 최적화되어 밀리초 단위의 저지연 처리 가능
– 상태 관리(Stateful Processing)와 정확히 한 번 처리(Exactly-once semantics) 보장
– Java, Scala, Python 등 다양한 언어 지원
– Kafka, Kinesis, HDFS, JDBC 등 다양한 데이터 소스/싱크와 연동 가능
ㅇ 적합한 경우:
– 실시간 로그 분석, IoT 센서 데이터 처리
– 금융 거래 실시간 모니터링
– 실시간 알림 및 추천 시스템 구축
ㅇ 시험 함정:
– Spark Streaming과 혼동하여 마이크로배치 기반이라고 잘못 선택하는 경우 있음 (Flink는 진정한 스트리밍 처리)
– 단순 배치 처리만 가능하다고 오해하는 경우
ㅇ 시험 대비 “패턴 보기” 예시:
– (O) Flink는 이벤트 기반의 실시간 스트리밍 처리를 지원한다.
– (X) Flink는 마이크로배치 기반의 스트리밍 엔진이다.
– (O) Flink는 Exactly-once 처리를 지원한다.
– (X) Flink는 상태 관리를 지원하지 않는다.
ㅁ 추가 학습 내용
Flink 학습 정리
1. Watermark
스트리밍 데이터에서 이벤트 시간(Event Time) 기준 처리를 가능하게 하기 위해 사용되는 개념으로, 지연 도착 데이터 처리를 제어하는 기준 시각을 나타낸다. Watermark는 특정 시점까지의 데이터가 모두 도착했다고 간주하게 하여 윈도우 연산 종료 시점을 결정한다.
2. Event Time vs Processing Time
Event Time은 데이터가 실제 발생한 시각을 기준으로 처리하는 방식이며, 지연 데이터 처리에 유리하다. Processing Time은 데이터가 시스템에 도착하여 처리되는 시각을 기준으로 하며, 구현은 간단하지만 지연 데이터 처리에는 취약하다.
3. Checkpoint와 Savepoint 차이
Checkpoint는 Flink가 주기적으로 자동 생성하는 상태 스냅샷으로, 장애 복구를 위해 사용된다. Savepoint는 사용자가 명시적으로 생성하는 상태 스냅샷으로, 애플리케이션 업그레이드나 재배포 시 상태를 유지하는 데 사용된다.
4. 상태 백엔드(State Backend) 종류와 특성
– MemoryStateBackend: 상태를 메모리에 저장하며 속도가 빠르지만 상태 크기에 제한이 있다.
– RocksDBStateBackend: 상태를 디스크 기반 RocksDB에 저장하여 대용량 상태 처리가 가능하지만 메모리 기반보다 느리다.
– FsStateBackend: 상태를 파일 시스템에 저장하며, 주로 장기 보관 용도로 사용된다.
5. 다른 스트리밍 프레임워크와의 비교
– Spark Streaming: 마이크로 배치 방식, 배치 처리와 통합이 용이
– Storm: 실시간 이벤트 처리에 특화, 보장 수준 선택 가능
– Kafka Streams: Kafka에 최적화된 경량 스트리밍 라이브러리, 별도 클러스터 불필요
– Flink: 진정한 이벤트 시간 기반 실시간 처리, 강력한 상태 관리와 정확한 일관성 보장
6. Flink SQL과 Table API
SQL 구문과 Table API를 사용해 스트리밍 데이터를 쿼리하고 변환할 수 있다. 배치와 스트리밍을 동일한 API로 처리 가능하며, 이벤트 시간 기반 윈도우 연산을 지원한다.
7. 운영 환경에서의 장애 복구 메커니즘
Checkpoint와 상태 백엔드를 활용하여 장애 발생 시 마지막 일관된 상태로 복구한다. JobManager가 복구를 조율하고 TaskManager들이 상태를 복원하여 처리를 재개한다.
8. JobManager와 TaskManager 구조
JobManager는 작업 스케줄링, 체크포인트 관리, 장애 복구를 담당한다. TaskManager는 실제 데이터 처리를 수행하며, 슬롯 단위로 작업을 실행한다. JobManager와 TaskManager는 네트워크를 통해 통신하며 전체 작업을 분산 처리한다.