Flink Architecture
Unbounded and Bounded
- Unbounded streams은 프로그램 실행 시 쌓이는 로그처럼 무한히 생성되는 것을 말한다. 이벤트가 특정 시점에 완료되지 않기때문에 이벤트 수집 즉시 처리되어야 한다.
- Bounded streams은 이벤트의 시작과 끝이 있다. 모든 이벤트를 수집하여 일괄처리가 가능하다.
Flink Cluster
JobManager
- Flink Application의 분산 실행을 조정하고 관리한다. 작업 실행을 조율하고 완료, 실패된 작업에 대한 대응을 한다.
- ResourceManager, Dispatcher, JobMaster로 구성된다.
- ResourceManager는 Flink Cluster에서 리소스 할당 및 해제를 담당. 리소스 예약 단위인 task slots을 관리한다.
- Dispatcher는 실행을 위한 Flink App를 제출하고 Flink WebUI를 실행하여 작업 실행에 대한 정보를 제공한다.
- JobMaster는 단일 Job Graph 실행 관리를 담당한다.
Tasks and Operator Chains
- 분산 실행을 위해 Flink는 각 연산자 작업을 연결하고 스레드를 사용하여 작업하여 버퍼링, 오버헤드를 줄여 대기 시간일 줄어 처리량을 증가시킨다.
Task Slots and Resources
- TaskManager는 JVM 프로세스이며 별도의 스레드에서 하나 이상의 작업을 실행할 수 있다. 작업 수를 제한하기 위해 task slots이 최소 하나이상 존재한다.
- TaskManager에서 관리되는 메모리의 1/3을 각 Task Slot으로 할당한다.
- 동일한 작업을 하는 하나의 작업의 Slot 공유를 허용한다. 이로인해 병렬처리 하는 작업이 총 몇개인지 계산할 필요가 없다. 리소스 사용을 줄일 수 있다.
Timely Stream Processing
watermark
- event 진행 상황을 체크하는 Flink의 매커니즘이다. watermark는 데이터 스트림의 일부로 흐르고 타임스탬프를 전달한다. 단순히 스트림의 주기적인 마커이다.
Windowing
- 스트림에서의 요청은 무한하기 때문에 스트림의 모든 요소를 계산하는 건 불가능하다. 대신 일정 기준을 정해 구분하는 것을 Windowing이라고 한다.
Reference
Apache Flink Docs