본문 바로가기
데이터 엔지니어링

Flink Memory에 대해 알아보자

by 내기록 2024. 5. 21.
반응형

목차 LIST

     

     

     

    Flink Memory

    • Total Process Memory
      • 정의 : Flink 작업 프로세스 전체에 할당되는 메모리
      • 설명 : Flink 프로세스가 사용할 수 있는 전체 메모리로 Flink 외부의 다른 프로세스에 영향을 줄 수 있음
        • JVM Metaspace : 클래스 메타데이터를 저장하는 영역으로 클래스와 메서드 정보 등 저장
        • JVM Overhead : JVM 내부 운영에 필요한 메모리로 Flink 작업에서 사용하는 메모리 외에 JVM 운영용
    • Total Flink Memory
      • 정의 : Flink 작업에 할당된 전체 메모리
      • 설명 : Flink 클러스터에서만 사용되는 메모리로 Flink 작업에만 영향을 줌

    https://nightlies.apache.org/flink

     

     

    Total Process Memory

    참고 : 메모리 구성 충돌로 배포 오류가 발생할 수 있으므로 taskmanager.memory.process.size 와 taskmanager.memory.flink.size를 함께 설정하는 것은 권장하지 않습니다.

    # JobManager (JobMaster/ResourceManager/Dispatcher) process의 전체 사이즈
    jobmanager.memory.process.size
    
    # TaskManager process의 전체 사이즈
    taskmanager.memory.process.size

     

     

    Managed memory

    TaskExecutor가 관리하는 메모리 사이즈로 memory manager가 관리하는 off-heap 메모리의 크기입니다.

    정렬, 해시 테이블, 중간 결과 캐싱 및 RocksDB 백엔드(상태 저장용)에 사용됩니다. 

    taskmanager.memory.managed.size

     

     

    Off-Heap

    taskmanager.memory.task.off-heap.size

    off-heap 메모리는 힙 메모리 외부에서 관리되는 메모리로 두 가지 형태로 사용됩니다.

    공통적으로 가비지 컬렉션의 영향을 받지 않아 큰 데이터를 다룰 때 효과적이지만 사용자가 직접 메모리를 관리해야 합니다.

    Flink에서는 주로 Direct Memory를 사용합니다.

    1. Direct Memory
      • JVM 내에서 관리되지만 힙 외부에 존재하는 메모리
      • I/O 작업에 최적화되어 있어서 네트워크 통신, 파일 입출력 등 고성능 I/O 작업을 처리하는데 유용합니다.
    2. (참고) Native Memory 
      • JNI(Java Native Interface) 또는 네이티브 라이브러리(ex., c/c++)와 상호작용하는 메모리
      • JVM 외부에서 직접 할당 및 관리됩니다.
      • 고성능이 요구되거나 네이티브코드와의 상호 운용성이 필요한 경우 유용합니다. (ex., 특정 하드웨어와 직접 통신, 고성능 데이터 처리 라이브러리 사용)

    * Network

    Taskmanager에 network memory 설정을 하는 이유를 알아보겠습니다.

    JobManager는 작업 관리를 담당하기 때문에 주로 메타데이터와 작업 상태를 다른 JobManager와 교환하거나, TaskManager에 명령을 전달하는 역할을 하기 때문에 네트워크 트래픽이 많지 않습니다.

    반면에 TaskManager는 실제 데이터 처리 작업을 수행하며 데이터를 읽고 처리하며 처리된 데이터를 다음 단계로 전송합니다. TaskManager는 데이터 스트림을 다른 TaskManager로 전송하거나, 외부 시스템과 데이터를 주고받는 데 많은 네트워크 자원을 사용하며 네트워크 I/O가 집중적으로 발생하기 때문입니다.

    taskmanager.memory.network.max

     

     

     

    JVM Metaspace

    클래스, 메소드와 같은 메타데이터를 저장하는 메모리공간으로 동적으로 많은 수의 클래스를 로드하는 경우 OOM이 발생할 수 있습니다.

    이 메모리에는 Flink에서 실행되는 JAR 파일의 클래스 및 메서드 정보가 포함됩니다.

    아래 설정을 통해 설정할 수 있습니다.

    jobmanager.memory.jvm-metaspace.size

     

     

     

     

    References

    https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/deployment/memory/mem_setup_tm/

    반응형

    댓글