Flink란?
대규모 데이터 스트림 처리를 위한 분산 처리 프레임워크
배치 처리가 아닌 실시간 스트리밍 처리
다음과 같은 실시간 데이터 처리를 할 때 많이 사용한다.
- 실시간 로그 분석 (웹/앱 사용 데이터)
- 금융 거래 사기 탐지
- IoT 센서 데이터 실시간 모니터링
- 실시간 추천 시스템 (넷플릭스, 유튜브, 쿠팡)
- 인스타그램 실시간 좋아요 반영 : 사용자 경험 향상을 위한 즉각적인 피드백, 수십억 건의 상호작용을 지연없이 처리
컴포넌트

Client
Flink 작업을 사용자가 제출할 때 최초로 거치는 진입점
Client는 애플리케이션 코드(JAR, SQL 등)를 JobGraph로 변환해 JobManager에게 제출하는 역할을 함
- 주요 기능
- 코드 준비 : Java/Scala로 작성한 Flink 프로그램 또는 SQL 쿼리를 읽어옴
- 실행 계획 생성 : 사용자 코드 → StreamGraph → JobGraph로 변환
- 제출 : JobManager에게 JobGraph를 전송하고 실행 요청
- 모니터링/종료 명령 : 작업 진행 상황, 로그, 메트릭 확인, 필요 시 Cancel 명령 전송
JobManager
Flink 작업 전체를 총괄하는 두뇌 같은 존재. 작업을 계획하고, 실행하고, TaskManager들에게 일을 시킴
- 주요기능
- 실행 계획 수립: 제출된 Job(Graph)을 실행 가능한 태스크 단위로 쪼갬
- 자원 할당: TaskManager가 가진 슬롯에 태스크를 배치
- 체크포인트 조율: 모든 TaskManager가 동시에 상태를 저장하도록 트리거
- 장애 복구: 태스크 실패 시 체크포인트나 세이브포인트에서 재시작
- 중요 포인트
- 클러스터에는 일반적으로 1개 JobManager가 메인으로 동작, 고가용성을 위해 백업 JobManager를 둘 수도 있음