Apache Flink는 실시간 스트리밍 처리와 배치 처리에 모두 강점을 가진 강력한 분산형 데이터 처리 플랫폼입니다.
JobManager는 Flink 클러스터의 중앙 제어 역할을 담당합니다.
작업(Job)의 생명 주기를 관리
- 작업 스케줄링 및 상태(State) 관리
- TaskManager와의 통신을 통해 작업을 분배하고 진행 상황을 모니터링
주요 역할
- 장애 발생 시 작업 복구를 위해 상태 체크포인트를 관리
- 클러스터 리소스의 효율적 사용을 위해 작업 최적화
TaskManager는 실제 데이터를 처리하는 작업자 노드입니다.
구조와 기능
- 여러 개의 작업 슬롯(Slot)을 보유하며, 각 슬롯은 병렬 작업을 실행
- JobManager로부터 작업을 할당받아 처리
중요한 특징
- 각 작업 슬롯은 작업 간 간섭을 최소화하기 위해 고유한 메모리 공간 사용
- 데이터 전송 시 네트워크 I/O를 최적화하여 성능 향상
Flink에서 상태는 데이터 스트림 처리 중 유지해야 하는 중요한 데이터입니다.
상태 유형
- Keyed State: 특정 키별로 상태를 저장 (예: 사용자별 세션 데이터)
- Operator State: 연산자 단위로 상태를 저장 (예: 데이터 소스 상태)
특징 및 활용
- Flink의 상태는 RocksDB나 메모리에 저장
- Checkpointing을 통해 상태를 주기적으로 저장하며, 장애 발생 시 복구에 사용
- Exactly-once 처리 보장을 통해 데이터 손실이나 중복 없이 안정적인 스트리밍 처리 가능
Flink의 Connector는 외부 시스템과의 데이터 흐름을 관리합니다.
주요 역할
- 다양한 데이터 소스(예: Kafka, HDFS, AWS S3)로부터 데이터를 가져오거나, 데이터 싱크(예: MySQL, Elasticsearch)로 데이터를 저장
특징
- 다양한 플러그인을 통해 손쉽게 확장 가능
- 데이터를 실시간으로 가져오는 소스와 저장하는 싱크를 유연하게 설정
Window는 스트리밍 데이터에서 특정 시간이나 이벤트 범위를 기준으로 데이터를 그룹화하여 처리합니다.
유형
- **Tumbling Window:** 고정된 크기로 데이터 그룹화
- **Sliding Window:** 고정된 간격으로 겹치는 데이터 그룹화
- **Session Window:** 이벤트 사이의 비활성 기간으로 그룹화
활용 예시
- 센서 데이터의 시간별 평균 계산
- 사용자 활동 분석 및 세션 기반 추천 시스템 구축
- 외부 데이터 소스에서 데이터를 Connector로 가져옴
- 데이터를 TaskManager의 작업 슬롯에서 병렬로 처리
- 처리 중 발생하는 상태는 State로 저장
Checkpointing을 통해 작업 중단 시 데이터 상태를 복구
JobManager가 TaskManager의 작업 할당과 상태 모니터링을 조정
Flink의 이러한 구성 요소는 대규모 데이터 처리와 실시간 데이터 스트리밍의 신뢰성과 성능을 동시에 제공합니다.
