Flink 1.10.0 Taskmanager Memory Concepts & Configuration
by Jaesang Lim
Flink 1.10.0 Taskmanager Memory Concepts & Configuration
Flink 1.10.0부터 TaskManager Memory 설정을 fine-grained하게 설정하도록 변경하였고, 이유는 다음과 같음
- 모든 운영환경에 합리적인 default값을 설정하는 것이 어려움
- 1.10.x 이하 버전에 사용하던 taskmanager.heap.size or taskmanager.heap.mb 설정은 On-Heap 뿐아니라, Off-Heap의 구성요소를 포함하는 설정값으로 이름의 혼동이 있음
Taskmanager 메모리구조
그래서.. 먼저 Flink TaskManager의 메모리 구조를 보고, 어떻게 메모리 설정하도록 바뀌었는지 알아보고자함
복잡하지만 크게 보면 2가지로 나눠져있음
- Total Process Memory
- Total Flink Memory
정리하면 Total Process Memory = Total Flink Memory + (JVM Metaspace + JVM Overhead)
Total Flink Memory를 자세히 보면 크게 또 2가지로 나눠져있음
- JVM Heap Memory
- Off-Heap Memory
JVM Heap Memory
- Framework Heap 영역
- Flink 자체에서 필요한 전용 JVM 메모리
- Task Heap 영역
- 우리가 개발한 코드, 즉 task와 operator가 실행되는 JVM heap memory
Off-Heap Memory
- Managed Memory
- Flink에 관리되는 메모리로, native memory 즉, off-heap에 할당
- Managed Memory을 사용하는 워크로드
- Streaming - RocksDBBackend
- Batch - sorting, hash tables, caching of intermediate results.
- Network
- Task 간에 data를 교환, exchange을 위한 메모리 공간
- e.g. 네트워크 전송을 위한 버퍼링 공간
- JVM Overhead
- JVM overhead: e.g. thread stacks, code cache, garbage collection space etc
Taskmanager 메모리 설정값
셋 중 하나의 설정값을 이용하여 Flink TaskManager 메모리 설정하기를 권장
- taskmanager.memory.flink.size
- taskmanager.memory.process.size
- taskmanager.memory.task.heap.size and taskmanager.memory.managed.size
참고
- taskmanager.memory.flink.size와 taskmanager.memory.process.size 둘다 설정하는 것은 추천하지않음
- 둘다 설정할 경우, 메모리 구성 충돌로 인해 배포가 실패 할 수 있음
1. taskmanager.memory.flink.size
- Total Flink Memory size
- JVM Metaspace and JVM Overhead을 제외한 메모리
- Framework Heap Memory, Task Heap Memory, Task Off-Heap Memory, Managed Memory, and Network Memory.
2. taskmanager.memory.process.size
- Total Process Memory size for the TaskExecutors.
- taskmanager.memory.flink.size + JVM Metaspace + JVM Overhead 이 포함된 설정값
3-1. taskmanager.memory.task.heap.size
- Task Heap Memory size for TaskExecutors.
- task실행을 위한 JVM heap memory
- 설정안할시, taskmanager.memory.flink.size - (Framework Heap Memory+ Task Off-Heap Memory+ Managed Memory + Network Memory)
3-2. taskmanager.memory.managed.size
- Managed Memory size for TaskExecutors.
- Memory Manger에 의해 관리되는 Off-heap memory
- sorting, hash tables, caching of intermediate results and RocksDB state backend에 사용되는 메모리 영역
- 설정안할시 taskmanager.memory.flink.size값에서 taskmanager.memory.managed.fraction (default 0.4)
Standalone 환경 메모리 설정 권장사항
- Total Flink memory (taskmanager.memory.flink.size)
YARN/Mesos 환경 메모리 설정 권장사항
- Total process memory (taskmanager.memory.process.size)
- 이 메모리 JVM heap, managed memory size , direct memory로 분할되어 설정
- 컨테이너화 배포환경(YARN/Mesos)일 경우, Container 사이즈에 해당
State Backends에 따른 메모리 설정
- Heap state backend
- Stateless job 이거나 heap state backend (MemoryStateBackend or FsStateBackend)을 사용시, Managed memory는 0으로 설정)
- RocksDB state backend
- RocksDBStateBackend은 native memory영역을 사용하고 RocksDB는 default로 managed memory 사이즈로 native memory를 설정
- how to tune RocksDB memory
참고자료
Subscribe via RSS