개요
- AWS Managed Flink에서는 사용자가 정의할 수 있는 설정이 제한적입니다.
- 사용자가 Parallelism 과 ParallelismPerKPU를 입력하면 이에 맞춰서 필요한 KPU가 계산되고
- 1 KPU 당 1 vCPU, 4GB메모리를 기준으로 AWS 에서 적당하게 컨테이너를 기동합니다.
내용
- Flink는 TaskManager 와 slot을 기반으로 병렬처리를 제어하는데
- AWS Managed Flink는 KPU를 중심으로 제어하게 됩니다. (과금단위 이기 때문에)
- 이를 좀 더 자세히 살펴보고 원하는 세팅을 만들기 위해서 수치를 어떻게 제어해야 하는지 이해하는 것이 목적입니다.
Amazon MSF 리소스 구성 요소 간의 관계
I. KPU (Kinesis Processing Unit): 물리적 리소스 단위
|
요소
|
사양
|
세부 정보 (출처)
|
|
CPU
|
1 vCPU
|
컴퓨팅 코어 1개.
|
|
메모리
|
4 GB
|
총 4 GB의 메모리를 제공합니다.
|
|
- 힙 메모리
|
3 GB/KPU
|
JVM 힙 메모리 할당에 사용됩니다.
|
|
- 네이티브 메모리
|
1 GB/KPU
|
네이티브 코드 할당을 위해 예약되며, Managed Memory (RocksDB State Backend와 같은 네이티브 프로세스에 사용)의 기반이 됩니다.
|
|
디스크 공간
|
50 GB/KPU
|
실행 중인 애플리케이션 상태 저장을 위한 디스크 공간이 제공됩니다.
|
|
오케스트레이션
|
추가 1 KPU
|
애플리케이션 당 오케스트레이션 목적으로 추가 KPU 1개가 부과됩니다.
|
II. Parallelism (병렬 처리 수준): 논리적 작업 수
|
요소
|
설명
|
제어 방식 및 기본값
|
|
Parallelism
|
애플리케이션 전체의 기본 병렬 실행 수준을 정의합니다.
별도로 재정의하지 않는 한, 모든 연산자(Operator), 소스(Source), 싱크(Sink)는 이 병렬 처리 수준으로 실행됩니다. |
기본값은 1이며, 기본 최대 한도는 256입니다.
|
|
MaxParallelism
|
상태 저장 애플리케이션이 상태 손실 없이 확장할 수 있는 최대 병렬 처리 수준을 정의합니다.
|
상태가 처음 생성될 때 설정되며, 일반적으로 Parallelism 일 때 기본값은 128입니다.
|
III. ParallelismPerKPU: KPU 당 슬롯 밀도 (자원 활용도)
|
요소
|
설명
|
제어 방식 및 영향
|
|
ParallelismPerKPU
|
단일 KPU에 할당되는 병렬 태스크(Task Slot)의 수.
|
기본값은 1이며, 최대값은 8입니다.
|
|
용도
|
I/O Bound 작업에 유용합니다.
이 값을 높게 설정하면 동일한 KPU 내에서 더 많은 병렬성을 제공하여 KPU 리소스를 완전히 활용할 수 있습니다. |
예를 들어, I/O Bound 애플리케이션에서 ParallelismPerKPU를 1에서 4로 증가시키면, 동일한 KPU 리소스로 4배의 병렬성까지 확장 가능합니다.
|
IV. Apache Flink 의 Task Manager 및 Task Slot
|
요소
|
설명
|
관계
|
|
Task Manager
|
애플리케이션의 실제 연산을 실행하는 주체이며, 각 Task Manager는 KPU 리소스 내에서 실행됩니다.
Task Manager의 성능은 CPU Utilization 및 Heap Memory Utilization과 같은 CloudWatch 지표를 통해 모니터링할 수 있습니다. |
Task Manager의 수는 할당된 총 KPU 수에 따라 결정됩니다
(AWS 서비스가 자동 프로비저닝). |
|
Task Slot
|
Apache Flink가 리소스를 할당하는 단위입니다.
Task Slot은 subtask (실행 스레드와 유사한 개념)를 수용합니다. |
Task Manager 당 할당되는 슬롯의 수로 병렬도 제어.
|
- 이부분에서 주의해야 할점이 있습니다 !!!
1. ParallelismPerKPU와 Task Slot의 정의
2. Task Manager와 KPU의 관계
3. ParallelismPerKPU를 1로 설정했는데도 Task Manager에 슬롯이 하나 이상 할당된 것처럼 보이거나, 혹은 여러 개의 Task Manager가 확인된 이유는 애플리케이션의 총 병렬 처리 수준(Parallelism)과 KPU 개수 때문입니다.
정리
|
구분
|
순수 Apache Flink 환경
|
Amazon Managed Service for Apache Flink (MSF) 환경
|
|
기본 리소스 단위
|
Task Manager (작업 실행 및 슬롯 호스팅)
|
KPU (Kinesis Processing Unit) (과금 및 용량 프로비저닝 단위)
|
|
병렬도 정의 기준
|
Task Manager 내의 Task Slot 수
|
KPU당 할당된 Task Slot 수 (ParallelismPerKPU)
|
|
실제 실행 컨테이너
|
Task Manager 프로세스
|
Task Manager (AWS가 여러 KPU 리소스를 통합하여 실행 가능)
|
|
메모리 확장
|
Task Manager 메모리 설정(taskmanager.memory.managed.fraction) 조정
|
총 KPU 수 증가에 따라 Managed Memory 총량 증가
|
1. 총 할당된 KPU 계산 (리소스 및 메모리 결정)
2. 총 Task Slot 수 (실행 능력)
3. Task Manager의 개수/메모리 제어 정리
|
항목
|
사용자가 직접 제어하는가?
|
제어 방법 및 결과
|
|
KPU 개수
|
아니요.
Parallelism과 ParallelismPerKPU 설정을 통해 간접적으로 계산되어 할당됩니다. |
KPU 수를 늘리려면 Parallelism을 늘리거나 ParallelismPerKPU를 낮춰야 합니다.
|
|
Task Manager 개수
|
아니요.
KPU 할당에 따라 AWS 서비스에 의해 자동 관리됩니다. |
Task Manager는 할당된 KPU 리소스 내에서 애플리케이션의 태스크를 실행합니다.
|
|
총 Managed Memory
|
아니요.
할당된 총 KPU 수에 비례하여 크기가 결정됩니다. |
Managed Memory 용량을 늘리려면 KPU 수를 늘려야 합니다.
|
|
Task Slot 개수
|
예.
ParallelismPerKPU를 통해 Task Manager당 슬롯 수를 제어하고, Parallelism을 통해 총 슬롯 수를 제어합니다. |
Parallelism을 늘리는 것은 총 Task Slot 수를 늘리는 가장 직접적인 방법입니다.
|
실제 예시
- Parallelism 20, ParallelismPerKPU 1 = 총 20 KPU
1. 리소스 할당 (KPU 기준)
|
항목
|
20 KPU가 제공하는 총 예상 리소스
|
생성 결과 (3 TM 합산)
|
|
총 vCPU
|
vCPU
|
CPU
|
|
총 Physical Memory
|
GB
|
GB
|
|
총 Managed Memory
|
GB (네이티브 메모리 할당 기준)
|
GB
|
2. Task Manager 개수 및 Slot 할당 검증
A. 총 Task Slot 수
B. Task Manager당 슬롯 개수와 ParallelismPerKPU의 차이
'AWS Architecture' 카테고리의 다른 글
| 실시간 데이터처리 구현 #3 (DataSkew완화 및 메모리/병렬처리 튜닝) (0) | 2025.10.17 |
|---|---|
| AWS Cognito (2) - JWT Token(JWT/JWS) Verify with Spring (0) | 2023.03.10 |
| AWS Cognito (1) - 사용자관리/OAuth 2.0 (0) | 2023.03.03 |
| AWS Java SDK - S3 File upload #2 (0) | 2022.06.07 |
| AWS Java SDK - S3 File upload #1 (0) | 2022.05.19 |
