← Apache Flink 코스

Courses · Day 1

기초 — Flink가 왜 존재하는가

스텝 2 / 17

2 / 17
개념 flink-course-02

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가 여러 대 있어야 병렬 처리가 되는 거 아닌가?"라는 동료의 질문에 어떻게 답하겠는가?