
Apache Flink는 분산 스트림 처리 시스템으로, 작업을 하나의 프로세스에서 실행하는 방식이 아니라 클러스터에 분산 배치하여 병렬로 처리한다. 이를 위해 Flink 클러스터는 작업을 계획하고 관리하는 컴포넌트와 실제 데이터를 처리하는 컴포넌트로 구조가 명확히 분리되어 있다.
Flink 클러스터의 구성은 크게 두 영역으로 나뉜다. 제어 평면(Control Plane)은 작업의 계획 수립, 배치, 상태 관리, 장애 복구를 담당하며, 데이터 평면(Data Plane)은 제어 평면의 결정에 따라 실제 연산을 수행한다.
JobManager는 제어 평면을 구성하는 중심 컴포넌트로, 제출된 Job의 실행을 관리한다. JobManager는 데이터를 직접 처리하지 않으며, 작업이 어떤 구조로 실행될지 결정하고 클러스터 자원을 기준으로 실행을 조율한다.
JobManager는 제출된 Job을 실행 가능한 형태로 해석한 뒤, 하나의 Job을 여러 개의 병렬 Task로 분해한다. 이후 각 Task를 어떤 TaskManager의 슬롯에 배치할지 결정하며, 이 과정에서 병렬도 설정과 현재 가용 자원이 함께 고려된다. 작업 실행 중에는 각 Task의 상태를 모니터링하고, 실패가 발생할 경우 재시작이나 복구 절차를 수행한다. 체크포인트 생성과 장애 복구 역시 JobManager가 관리한다.
| 구성 요소 | 역할 |
|---|---|
| Dispatcher | 외부 요청의 진입점이다. Job 제출 요청과 클러스터 상태 조회 요청을 처리한다. |
| Resource Manager | 클러스터 자원을 관리한다. TaskManager가 제공하는 Task Slot을 관리하고, Job 실행에 필요한 자원을 할당한다. |
| JobMaster | Job마다 하나씩 생성된다. 특정 Job의 실행을 직접 관리하며, 슬롯 요청, Task 배포, 실행 상태 추적을 담당한다. |
이 구조는 Job 실행 관리와 클러스터 자원 관리를 분리하기 위한 목적을 가진다.
TaskManager는 데이터 평면을 구성하는 워커 프로세스로, 실제 데이터 처리를 수행한다. 각 TaskManager는 독립적인 프로세스로 실행되며, JobManager의 지시에 따라 할당된 Task를 수행한다.
TaskManager는 하나 이상의 Task Slot을 가지며, 각 슬롯은 하나의 Task가 실행될 수 있는 논리적 실행 공간이다. JobManager는 Task를 배치할 때 TaskManager 단위가 아니라 슬롯 단위로 배치 결정을 수행한다.
Task Slot은 TaskManager 내부에서 리소스를 분리하는 단위로, 슬롯 단위로 CPU와 메모리 사용량이 제한된다. 이를 통해 Task 간 리소스 간섭이 발생하지 않도록 한다.
슬롯에서 실행되는 Task는 Source, Map, Filter, Window, Sink와 같은 연산 단계에 해당하며, 사용자가 작성한 연산 흐름에 따라 구성된다. 이러한 Task들이 병렬로 실행되면서 Flink는 스트림 데이터를 처리한다.