Flink 아키텍처 — JobManager/TaskManager/Slot (개인 PC 기준)
직관적으로
회사 조직에 비유하면, JobManager는 '프로젝트 매니저'다 — 일을 누구에게 맡길지 조율하고 진행 상황을 관리한다. TaskManager는 '실제로 일하는 팀원들'이다 — 데이터를 실제로 처리하는 주체. Task Slot은 그 팀원 한 명이 동시에 처리할 수 있는 '작업 칸막이' 개수라고 보면 된다.
실제 사례
실무 클러스터에서는 JobManager 1대와 TaskManager 여러 대(각각 다른 서버)가 따로 존재한다. 하지만 **개인 PC에서 로컬로 실행하면 이 모든 게 하나의 JVM 프로세스(MiniCluster) 안에서 함께 돈다** — 실제로 서버가 여러 대 있는 게 아니라 노트북 하나가 JobManager 역할과 TaskManager 역할을 동시에 흉내 내는 것이다. Task Slot 개수는 보통 CPU 코어 수만큼(예: 4코어 노트북이면 슬롯 4개) 잡으면 무난하다.
정확한 원리
JobManager는 내부적으로 세 역할로 나뉜다 — **ResourceManager**(슬롯 할당·자원 관리), **Dispatcher**(REST 인터페이스로 잡 제출을 받고 WebUI 제공), **JobMaster**(개별 잡 하나의 실행을 지휘). TaskManager는 실제 연산(태스크)을 실행하고 데이터를 버퍼링한다 — 클러스터에는 TaskManager가 최소 1개는 반드시 있어야 한다. Task Slot은 TaskManager 자원(특히 관리 메모리)을 고정된 몫으로 나눈 단위다 — 슬롯 3개짜리 TaskManager라면 각 슬롯이 관리 메모리의 1/3씩 갖는 식이다. Flink는 관련된 연산자들을 하나의 태스크로 체이닝해 스레드 하나로 실행하며, "슬롯 공유(slot sharing)"를 통해 같은 잡의 여러 서브태스크가 슬롯 하나를 나눠 쓸 수 있어 병렬성 숫자를 정확히 맞추지 않아도 자원 활용이 되게 해준다.
흔한 오해
"슬롯 = CPU 코어"라고 단순히 등치시키는 오해가 흔하다. 정확히는 슬롯이 나누는 건 주로 **메모리**이고(CPU는 격리하지 않는다), 슬롯 개수를 CPU 코어 수에 맞추는 건 실무적으로 합리적인 기본값일 뿐이지 Flink가 강제하는 규칙은 아니다.
확인 문제
개인 노트북(4코어)에서 로컬로 Flink를 실행하고 있다고 하자. 이때 "TaskManager가 여러 대 있어야 병렬 처리가 되는 거 아닌가?"라는 동료의 질문에 어떻게 답하겠는가?
Answer Guide
로컬 환경에서는 TaskManager가 물리적으로 여러 대일 필요 없이, 하나의 JVM(MiniCluster) 안에 TaskManager 역할이 있고 그 안의 여러 Task Slot으로 병렬 처리가 이뤄진다는 점을 짚어야 한다.