플링크 솔트의 개념에 대한 자세한 설명

Ask는 flink의 논리적 개념입니다.작업은 하나 이상의 연산자로 구성됩니다(여러 연산자가 작업을 구성하려면 특정 조건을 충족해야 합니다. 관심 있는 베테랑은 연산자 체인에 대해 자세히 알아볼 수 있습니다.) 작업 실행의 효율성을 향상시키기 위해 병렬 처리 태스크에 대해 구성할 수 있어 실제 실행 중인 프로세스 중에 태스크가 병렬로 실행될 수 있으며 이때 태스크의 여러 병렬 태스크를 하위 태스크(subTask)라고 합니다. 아래 그림과 같이 각 점선 상자는 작업이고 상자의 원은 하위 작업입니다.
여기에 이미지 설명 삽입

요약하자면, Task는 논리적 개념이고, subTask는 실제로 실행 중인 인스턴스이며, Task에 있는 subTask의 수는 위에서 언급한 병렬 처리 정도입니다. 위의 그림에는 3개의 태스크와 6개의 하위 태스크가 있습니다. 

Slot
Slot은 Flink 클러스터에서 리소스 할당의 기본 단위로 주로 TaskManager에 분포하는데, Flink 아키텍처를 아는 사람이라면 TaskManager가 jvm 프로세스이고 subTask가 실행되는 곳이라는 것을 알 것이다.

TaskManager가 시작되면 자신의 리소스를 Slots 형태로 ResourceManager에 등록하고 JobManager가 ResourceManager에서 Slot 리소스를 신청한 후 이 Slots에서 실행할 하위 작업을 예약합니다. 하위 작업은 스케줄링의 기본 단위, 슬롯은 자원 할당의 기본 단위입니다.
여기에서 우리는 설명이 필요합니다. 메모리는 슬롯 사이에 격리되어 있고 CPU는 격리되어 있지 않습니다. 즉, 메모리는 독립적이지만 CPU는 공유됩니다 .

작업 병렬성과 슬롯 수 사이의 관계는 무엇입니까?
태스크의 병렬화를 위해서는 태스크에 병렬로 실행될 지정된 수의 하위 태스크가 있어야 하므로 각 하위 태스크는 다른 솔트에서 실행되어야 하므로 슬롯 수가 태스크의 병렬화보다 적을 수 없습니다 .

슬롯 공유는 슬롯 공유를 의미하지만 여기서 슬롯을 공유하는 subTask는 다음 조건을 충족해야 함을 유의해야 합니다.

1. subTask는 동일한 작업에서 나와야 하며 서로 다른 작업 간의 리소스가 격리되어 있고 TaskManager의 슬롯은 말할 것도 없고 TaskManager도 격리되어 있다고 생각합니다.

2. 하위 태스크는 서로 다른 태스크에서 나와야 합니다. 동일한 태스크의 하위 태스크는 슬롯을 공유할 필요가 없습니다. 그렇지 않으면 병렬 처리의 의미가 손실됩니다.

슬롯이 공유되지 않고 각 하위 작업이 별도의 슬롯에서 실행되면 어떻게 됩니까?

우리는 작업의 DAG에서 서로 다른 작업이 서로 다른 리소스를 소비한다는 것을 알고 있습니다.슬롯이 균등하게 분할되면 일부 리소스는 사용률이 높고 일부 리소스는 사용률이 낮습니다. 서로 다른 작업의 하위 작업 공유를 제한하려면 리소스 사용량이 많은 하위 작업과 리소스 사용량이 적은 하위 작업을 함께 배치하여 리소스를 재사용할 수 있습니다.또는 리소스 사용량이 적은 하위 작업이 완료된 후 실행 중이면 할당된 슬롯이 유휴 상태가 됩니다.

또한 슬롯 공유는 리소스에서 작업을 실행하기 위한 임계값도 낮춥니다. 각 슬롯을 공유하는 경우 작업을 실행하는 데 필요한 슬롯 수는 해당 작업의 모든 하위 태스크 수와 동일합니다. , 필요한 슬롯 수는 DAG의 모든 작업 간의 최대 병렬 처리 수에 따라 다릅니다.

슬롯 공유 시나리오에서 위의 애플리케이션에는 2개의 슬롯만 필요합니다.

여기에 이미지 설명 삽입
슬롯 공유가 없는 시나리오에서는 6개의 슬롯이 필요합니다.
여기에 이미지 설명 삽입

연산자를 작업에 연결하는 것은 유용한 최적화입니다.

  • 스레드 간 전환, 버퍼링의 오버헤드를 줄이고 대기 시간을 줄이면서 전체 처리량을 늘립니다.
  • 연결 동작은 구성 가능하며, 두 연산자를 함께 연결하면 동일한 스레드에서 실행할 수 있으므로 성능이 향상됩니다.

기본적으로 Flink는 가능한 한 많이 연결할 수 있는 연산자를 연결합니다(예: 두 개의 맵 변환 작업). 또한 Flink는 더 많은 요구 사항을 충족하기 위해 더 세분화된 연결 제어를 위한 API도 제공합니다.
전체 작업에 대해 연산자 연결을 비활성화하려는 경우 StreamExecutionEnvironment.disableOperatorChaining()을 호출할 수 있습니다. 다음 방법도 보다 세분화된 제어를 제공합니다. 이러한 메서드는 이전 데이터 변환에만 적용되기 때문에 DataStream 변환 작업 후에만 호출할 수 있습니다. 예를 들어 someStream.map(...).startNewChain()은 호출할 수 있지만 someStream.startNewChain()은 호출할 수 없습니다.
리소스 그룹은 Flink의 슬롯에 해당하며 필요에 따라 운영자를 다른 슬롯으로 수동으로 격리할 수 있습니다.
    
 

새 체인 시작 현재 오퍼레이터를 시작점으로 새로운 연결을 시작하십시오. 다음 두 매퍼 연산자는 서로 연결되지만 필터 연산자는 첫 번째 매퍼 연산자와 연결되지 않습니다. someStream.filter(...).map(...).startNewChain().map(...);
체인 비활성화
어떤 연산자도 현재 연산자와 연결할 수 없습니다. someStream.map(...).disableChaining();
슬롯 공유 그룹 설정

운영자의 리소스 그룹을 구성합니다. Flink는 실행을 위해 동일한 리소스 그룹의 운영자를 동일한 슬롯에 배치하고 다른 리소스 그룹의 운영자를 다른 슬롯에 할당하여 슬롯 격리를 달성합니다. 모든 입력 작업이 동일한 리소스 그룹에 있는 경우 리소스 그룹은 입력 연산자에서 상속됩니다. Flink의 기본 리소스 그룹 이름은 "default"이며 운영자는 명시적으로 slotSharingGroup("default")을 호출하여 이 리소스 그룹에 가입할 수 있습니다. someStream.filter(...).slotSharingGroup("이름");

작업 슬롯 및 리소스
각 작업자(TaskManager)는 별도의 스레드에서 하나 이상의 하위 작업을 실행할 수 있는 JVM 프로세스입니다. TaskManager에서 허용되는 작업 수를 제어하기 위해 소위 작업 슬롯(적어도 하나)이 있습니다. 각 작업 슬롯은 TaskManager에 있는 리소스의 고정된 하위 집합을 나타냅니다.
예를 들어, 3개의 슬롯이 있는 TaskManager는 각 슬롯에 대해 관리되는 메모리의 1/3을 사용합니다. 리소스를 할당한다는 것은 하위 작업이 관리되는 메모리를 놓고 다른 작업의 하위 작업과 경쟁하지 않고 대신 일정량의 예약된 관리되는 메모리를 갖는다는 것을 의미합니다. 여기에는 CPU 격리가 없으며 현재 슬롯은 작업의 관리되는 메모리만 격리합니다. 작업 슬롯 수를 조정하여 사용자는 하위 작업이 서로 격리되는 방식을 정의할 수 있습니다. TaskManager당 하나의 슬롯이 있습니다. 즉, 각 작업 그룹은 별도의 JVM에서 실행됩니다(예: 별도의 컨테이너에서 시작할 수 있음). 슬롯이 여러 개 있다는 것은 동일한 JVM을 공유하는 더 많은 하위 작업을 의미합니다. 동일한 JVM의 태스크는 TCP 연결(멀티플렉싱 사용) 및 하트비트 정보를 공유합니다. 또한 데이터 세트와 데이터 구조를 공유하여 작업당 오버헤드를 줄일 수 있습니다.
 

Flink의 슬롯은 작업 실행을 위한 리소스 응용 프로그램의 최소 단위입니다. 동일한 TaskManager의 모든 슬롯은 메모리로만 구분되며 CPU에서는 격리되지 않습니다.
각각의 TaskManager는 JVM 프로세스로, TaskManager에 하나의 슬롯만 있다면 각각의 작업 그룹이 별도의 JVM에서 실행된다는 의미이고, 슬롯이 여러 개라면 동일한 JVM을 공유하는 하위 작업이 더 많다는 의미다.
일반적으로 하위 작업의 수는 병렬 스레드의 수이며 병렬로 실행되는 하위 작업은 실행을 위해 다른 슬롯에 릴리스되어야 합니다.
기본적으로 Flink는 최대한 연결할 수 있는 연산자, 즉 연산자 체인을 연결합니다.Flink는 동일한 연산자 체인 그룹에 있는 모든 하위 작업을 동일한 슬롯으로 보내 실행합니다. 여러 하위 작업, 즉 여러 스레드입니다.
Flink는 필요에 따라 각 운영자를 서로 다른 슬롯으로 수동으로 격리할 수 있습니다.
작업이 사용하는 총 슬롯은 모든 리소스 격리 그룹이 차지하는 슬롯의 합계입니다.동일한 리소스 격리 그룹에서 슬롯은 연산자의 최대 병렬도에 따라 할당됩니다.

병렬 처리가 4이지만 슬롯이 3개만 있는 경우 배포가 실패합니다.
 

Supongo que te gusta

Origin blog.csdn.net/qq_35240226/article/details/129009358
Recomendado
Clasificación