JobManager 메모리 설정

JobManager 메모리 설정

JobManager는 Flink 클러스터의 제어 요소입니다. Resource Manager, Dispatcher, 그리고 실행 중인 각 Flink Job당 하나의 JobMaster라는 세 가지 구성 요소로 이루어져 있습니다. 이 가이드는 JobManager에 대한 하이레벨 및 세분화된 메모리 구성을 안내합니다.

여기서 설명하는 메모리 구성은 릴리스 버전 1.11부터 적용됩니다. 이전 버전에서 Flink를 업그레이드한다면 1.11 릴리스에서 많은 변경 사항이 도입되었으므로 마이그레이션 가이드를 확인하세요.

이 메모리 설정 가이드는 JobManager에만 관련됩니다! JobManager 메모리 구성 요소는 TaskManagers' 메모리 구성과 유사하지만 더 단순한 구조입니다.

출처: 문서

본문

전체 메모리 구성

메모리 구성을 설정하는 가장 간단한 방법은 프로세스의 전체 메모리(total memory)를 구성하는 것입니다. 로컬 실행 모드로 JobManager 프로세스를 실행한다면 메모리 옵션을 구성할 필요가 없으며, 구성해도 효과가 없습니다.

상세 구성

Flink's process memory model

다음 표는 위에 묘사된 모든 메모리 구성 요소를 나열하고, 각 구성 요소의 크기에 영향을 미치는 Flink 구성 옵션을 참조합니다.

Component Configuration options Description
JVM Heap jobmanager.memory.heap.size JobManager의 JVM Heap 메모리 크기입니다.
Off-heap Memory jobmanager.memory.off-heap.size JobManager의 Off-heap 메모리 크기입니다. 이 옵션은 direct 및 native 메모리 할당을 포함한 모든 off-heap 메모리 사용을 포함합니다.
JVM metaspace jobmanager.memory.jvm-metaspace.size Flink JVM 프로세스의 Metaspace 크기입니다.
JVM Overhead jobmanager.memory.jvm-overhead.min jobmanager.memory.jvm-overhead.max jobmanager.memory.jvm-overhead.fraction 스레드 스택, 코드 캐시, 가비지 컬렉션 공간 등 다른 JVM 오버헤드를 위해 예약된 네이티브 메모리로, 전체 프로세스 메모리제한된 분수 구성 요소(capped fractionated component)입니다.

JVM Heap 구성

앞서 전체 메모리 설명에서 언급했듯이 JobManager의 메모리를 설정하는 또 다른 방법은 JVM Heap 크기(jobmanager.memory.heap.size)를 명시적으로 지정하는 것입니다. 이는 다음이 사용하는 사용 가능한 JVM Heap을 더 잘 제어하게 해줍니다.

  • Flink 프레임워크
  • 작업 제출 중(예: 특정 배치 소스) 또는 checkpoint 완료 콜백에서 실행되는 사용자 코드

JVM Heap의 필요 크기는 주로 실행 중인 작업 수, 그 구조, 그리고 언급된 사용자 코드의 요구사항에 의해 결정됩니다.

JVM Heap을 명시적으로 구성했다면 *전체 프로세스 메모리(total process memory)*와 *전체 Flink 메모리(total Flink memory)*는 모두 설정하지 않는 것이 좋습니다. 그렇지 않으면 메모리 구성 충돌이 쉽게 발생할 수 있습니다.

Flink 스크립트와 CLI는 JobManager 프로세스를 시작할 때 JVM 매개변수 -Xms-XmxJVM Heap 크기를 설정합니다. JVM parameters도 참조하세요.

Off-heap 메모리 구성

Off-heap 메모리 구성 요소는 모든 유형의 JVM direct memorynative memory 사용을 담당합니다. 따라서 jobmanager.memory.enable-jvm-direct-memory-limit 옵션을 설정하여 JVM Direct Memory 제한을 활성화할 수도 있습니다. 이 옵션이 구성되면 Flink는 해당 JVM 인자로 제한을 Off-heap 메모리 크기로 설정합니다: -XX:MaxDirectMemorySize. JVM parameters도 참조하세요.

이 구성 요소의 크기는 jobmanager.memory.off-heap.size 옵션으로 구성할 수 있습니다. 예를 들어 JobManager 프로세스가 'OutOfMemoryError: Direct buffer memory'를 던지면 이 옵션을 조정할 수 있습니다. 자세한 내용은 문제 해결 가이드를 참조하세요.

Off-heap 메모리 소비의 가능한 소스는 다음과 같습니다.

  • Flink 프레임워크 의존성(예: Pekko 네트워크 통신)
  • 작업 제출 중(예: 특정 배치 소스) 또는 checkpoint 완료 콜백에서 실행되는 사용자 코드

전체 Flink 메모리JVM Heap을 명시적으로 구성했지만 Off-heap 메모리를 구성하지 않았다면, Off-heap 메모리 크기는 전체 Flink 메모리에서 JVM Heap을 뺀 값으로 도출됩니다. Off-heap 메모리 옵션의 기본값은 무시됩니다.

로컬 실행

클러스터를 만들지 않고 Flink를 로컬로(예: IDE에서) 실행한다면 JobManager 메모리 구성 옵션은 무시됩니다.

더 알아보기 (Learn more)