

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Managed Service for Apache Flink의 애플리케이션 조정 구현
<a name="how-scaling"></a>

Amazon Managed Service for Apache Flink의 작업 병렬 실행 및 리소스 할당을 구성하여 규모 조정을 구현할 수 있습니다. Apache Flink가 작업의 병렬 인스턴스를 예약하는 방법에 관한 자세한 내용은 Apache Flink 설명서의 [병렬 실행](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/)을 참조하세요.

**Topics**
+ [애플리케이션 병렬 처리 및 ParallelismPerKPU 구성](#how-parallelism)
+ [Kinesis 처리 단위 할당](#how-scaling-kpus)
+ [애플리케이션의 병렬 처리 업데이트](#how-scaling-howto)
+ [Managed Service for Apache Flink에서 자동 규모 조정 사용](how-scaling-auto.md)
+ [maxParallelism 고려 사항](#how-scaling-auto-max-parallelism)

## 애플리케이션 병렬 처리 및 ParallelismPerKPU 구성
<a name="how-parallelism"></a>

다음 [https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html) 속성을 사용하여 Managed Service for Apache Flink 애플리케이션 작업(예: 소스에서 읽기 또는 연산자 실행)에 대한 병렬 실행을 구성합니다.
+ `Parallelism` — 이 속성을 사용하여 기본 Apache Flink 애플리케이션 병렬성을 설정합니다. 모든 연산자, 소스 및 싱크는 애플리케이션 코드에서 재정의되지 않는 한 이 병렬성으로 실행됩니다. 기본값은 `1`이고, 기본 최대값은 `256`입니다.
+ `ParallelismPerKPU` — 이 속성을 사용하여 애플리케이션의 Kinesis 처리 단위(KPU)에 따라 예약할 수 있는 병렬 작업 수를 설정합니다. 기본값은 `1`이고 최대값은 `8`입니다. 블로킹 작업(예: I/O)이 있는 애플리케이션의 경우 `ParallelismPerKPU` 값이 높을수록 KPU 리소스가 완전히 활용됩니다.

**참고**  
`Parallelism`의 한도는 KPU 한도(기본 값 64)의 `ParallelismPerKPU`배와 같습니다. 한도 증가를 요청하여 KPU 한도를 늘릴 수 있습니다. 한도 증가를 요청하는 방법에 대한 지침은 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)의 “한도 증가를 요청하려면”을 참조하세요.

특정 연산자의 작업 병렬 처리 설정에 관한 자세한 내용은 Apache Flink 설명서의 [병렬 처리 설정: 연산자](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#operator-level)를 참조하세요.

## Kinesis 처리 단위 할당
<a name="how-scaling-kpus"></a>

Amazon Managed Service for Apache Flink는 용량을 KPU로 프로비저닝합니다. 단일 KPU는 1개의 vCPU 및 4GB의 메모리를 제공합니다. 할당된 모든 KPU에 대해 50GB의 실행 중인 애플리케이션 스토리지도 제공됩니다.

Managed Service for Apache Flink는 다음과 같이 `Parallelism` 및 `ParallelismPerKPU` 속성을 사용하여 애플리케이션을 실행하는 데 필요한 KPU를 계산합니다.

```
Allocated KPUs for the application = Parallelism/ParallelismPerKPU
```

Managed Service for Apache Flink는 처리량 또는 처리 활동의 급증에 대응하여 애플리케이션 리소스를 신속하게 제공합니다. 활동 급증이 지난 후 애플리케이션에서 리소스를 점진적으로 제거합니다. 리소스 자동 할당을 비활성화하려면 나중에 [애플리케이션의 병렬 처리 업데이트](#how-scaling-howto)에서 설명하는 대로 `AutoScalingEnabled` 값을 `false`로 설정합니다.

애플리케이션에 대한 KPU 기본 한도는 64입니다. 이 한도 증가를 요청하는 방법에 대한 지침은 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)의 “한도 증가를 요청하려면”을 참조하십시오.

**참고**  
오케스트레이션을 위해 추가 KPU가 부과됩니다. 자세한 내용을 알아보려면 [Managed Service for Apache Flink 요금](https://aws.amazon.com/kinesis/data-analytics/pricing/)을 참조하세요.

## 애플리케이션의 병렬 처리 업데이트
<a name="how-scaling-howto"></a>

이 섹션에는 애플리케이션의 병렬성을 설정하는 API 작업에 대한 샘플 요청이 포함되어 있습니다. API 작업과 함께 요청 블록을 사용하는 방법에 대한 추가 예와 지침은 [Managed Service for Apache Flink API 예 코드](api-examples.md) 섹션을 참조하십시오.

다음 예 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 작업 요청은 애플리케이션을 만들 때 병렬성을 설정합니다.

```
{
   "ApplicationName": "string",
   "RuntimeEnvironment":"FLINK-1_18",
   "ServiceExecutionRole":"arn:aws:iam::123456789123:role/myrole",
   "ApplicationConfiguration": { 
      "ApplicationCodeConfiguration":{
      "CodeContent":{
         "S3ContentLocation":{
            "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket",
            "FileKey":"myflink.jar",
            "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345"
            }
         },
      "CodeContentType":"ZIPFILE"
   },   
      "FlinkApplicationConfiguration": { 
         "ParallelismConfiguration": { 
            "AutoScalingEnabled": "true",
            "ConfigurationType": "CUSTOM",
            "Parallelism": 4,
            "ParallelismPerKPU": 4
         }
      }
   }
}
```

[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 작업을 위한 다음 예 요청은 기존 애플리케이션에 대한 병렬성을 설정합니다.

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "ParallelismConfigurationUpdate": { 
            "AutoScalingEnabledUpdate": "true",
            "ConfigurationTypeUpdate": "CUSTOM",
            "ParallelismPerKPUUpdate": 4,
            "ParallelismUpdate": 4
         }
      }
   }
}
```

[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 작업을 위한 다음 예 요청은 기존 애플리케이션에 대한 병렬성을 비활성화합니다.

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "ParallelismConfigurationUpdate": { 
            "AutoScalingEnabledUpdate": "false"
         }
      }
   }
}
```

# Managed Service for Apache Flink에서 자동 규모 조정 사용
<a name="how-scaling-auto"></a>

Managed Service for Apache Flink는 대부분의 시나리오에서 소스의 데이터 처리량과 연산자의 복잡성을 수용할 수 있도록 애플리케이션의 병렬성을 탄력적으로 조정합니다. 자동 조정은 기본적으로 활성화되어 있습니다. Managed Service for Apache Flink는 애플리케이션의 리소스(CPU) 사용량을 모니터링하고 그에 따라 애플리케이션의 병렬성을 탄력적으로 늘리거나 줄입니다.
+ CloudWatch 지표 최대 `containerCPUUtilization`이 15분 동안 75% 이상이면 애플리케이션이 스케일 업(병렬성 증가)합니다. 즉, 75% 이상인 1분 기간의 연속 데이터 포인트가 15개 있을 때 `ScaleUp` 작업이 시작됩니다. `ScaleUp` 작업은 애플리케이션의 `CurrentParallelism`을 두 배로 증가시키며, `ParallelismPerKPU`는 변경되지 않습니다. 그 결과 할당된 KPU도 두 배가 됩니다.
+ CPU 사용량이 6시간 동안 10% 미만으로 유지되면 애플리케이션이 축소됩니다 (병렬성 감소). 즉, 10% 미만인 1분 기간의 연속 데이터 포인트가 360개 있을 때 `ScaleDown` 작업이 시작됩니다. `ScaleDown` 작업은 애플리케이션의 병렬 처리를 절반(올림 적용)으로 줄이며, `ParallelismPerKPU`는 변경되지 않고, 할당된 KPU 수도 절반(올림 적용)으로 줄어듭니다.

**참고**  
1분 이상의 최대 `containerCPUUtilization` 기간을 참조하여 조정 작업에 사용되는 데이터 포인트와의 상관 관계를 찾을 수 있지만, 작업이 시작된 정확한 순간을 반영할 필요는 없습니다.

Managed Service for Apache Flink는 애플리케이션 `CurrentParallelism` 값을 애플리케이션의 `Parallelism` 설정보다 낮추지 않습니다.

Managed Service for Apache Flink 서비스가 애플리케이션을 확장할 때는 `AUTOSCALING` 상태가 됩니다. [DescribeApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_DescribeApplication.html) 또는 [ListApplications](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html) 작업을 사용하여 현재 애플리케이션 상태를 확인할 수 있습니다. 서비스가 애플리케이션을 확장하는 동안 사용할 수 있는 유효한 API 작업은 `Force` 파라미터가 `true`로 설정된 [StopApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)뿐입니다.

`AutoScalingEnabled` 속성([https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html)에 속함)을 사용하여 Auto Scaling 동작을 활성화하거나 비활성화할 수 있습니다. Managed Service for Apache Flink가 애플리케이션 `parallelism` 및 `parallelismPerKPU` 설정의 함수인 프로비저닝하는 KPUs에 대해서는 AWS 계정에 요금이 부과됩니다. 활동이 급증하면 Managed Service for Apache Flink 비용이 증가합니다.

요금에 대한 자세한 내용을 알아보려면 [Amazon Managed Service for Apache Flink 요금](https://aws.amazon.com/kinesis/data-analytics/pricing/)을 참조하세요.

애플리케이션 규모 조정에 대해 다음을 유의하세요.
+ 자동 조정은 기본적으로 활성화되어 있습니다.
+ 조정 기능은 Studio 노트북에는 적용되지 않습니다. 그러나 Studio Notebook을 내구성 상태의 애플리케이션으로 배포하는 경우 배포된 애플리케이션에 조정 작업이 적용됩니다.
+ 애플리케이션의 기본 한도는 64 KPU입니다. 자세한 내용은 [Managed Service for Apache Flink 및 Studio 노트북 할당량](limits.md) 단원을 참조하십시오.
+ 자동 크기 조정이 애플리케이션 병렬성을 업데이트하면 애플리케이션 다운타임이 발생합니다. 이러한 다운타임을 방지하려면 다음을 수행하십시오.
  + 자동 조정 사용 중지
  + `parallelism`[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 작업을 사용하여 애플리케이션의 및 `parallelismPerKPU`을 구성합니다. 애플리케이션의 병렬 처리 설정에 관한 자세한 내용은 [애플리케이션의 병렬 처리 업데이트](how-scaling.md#how-scaling-howto) 섹션을 참조하세요.
  + 애플리케이션의 리소스 사용량을 주기적으로 모니터링하여 애플리케이션의 워크로드에 대한 병렬성 설정이 올바른지 확인하십시오. 할당 리소스 사용량 모니터링에 대한 자세한 내용을 알아보려면 [Managed Service for Apache Flink의 지표 및 차원](metrics-dimensions.md) 섹션을 참조하십시오.

## 사용자 지정 자동 크기 조정 구현
<a name="how-scaling-custom-autoscaling"></a>

자동 크기 조정을 더 세밀하게 제어하거나 이외의 트리거 지표를 사용하려면 다음 예제를 사용할 `containerCPUUtilization`수 있습니다.
+ [AutoScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/AutoScaling)

  이 예제에서는 소스 또는 싱크로 사용되는 Amazon MSK 및 Amazon Kinesis Data Streams의 지표를 포함하여 Apache Flink 애플리케이션과 다른 CloudWatch 지표를 사용하여 Managed Service for Apache Flink 애플리케이션을 규모 조정하는 방법을 보여줍니다.

자세한 내용은 [Apache Flink에 대한 향상된 모니터링 및 자동 규모 조정](https://aws.amazon.com/blogs/big-data/enhanced-monitoring-and-automatic-scaling-for-apache-flink/)을 참조하세요.

## 예약된 자동 크기 조정 구현
<a name="how-scaling-scheduled-autoscaling"></a>

워크로드가 시간 경과에 따라 예측 가능한 프로파일을 따르는 경우 Apache Flink 애플리케이션을 사전에 규모 조정하는 것이 더 적합할 수 있습니다. 이 방식은 지표 기반의 반응형 규모 조정과 달리 예약된 시간에 애플리케이션을 규모 조정합니다. 하루 중 고정된 시간에 스케일 업 및 스케일 다운을 설정하려면 다음 예제를 사용할 수 있습니다.
+ [ScheduledScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/ScheduledScaling)

## maxParallelism 고려 사항
<a name="how-scaling-auto-max-parallelism"></a>

Flink 작업이 규모 조정할 수 있는 최대 병렬 처리는 해당 작업의 모든 연산자 중 *최소* `maxParallelism` 값에 의해 제한됩니다. 예를 들어 소스와 싱크만 있으며 소스의 `maxParallelism`이 16이고 싱크가 8인 간단한 작업의 경우 애플리케이션은 병렬 처리 8을 초과하여 규모를 조정할 수 없습니다.

연산자의 기본 `maxParallelism`이 계산되는 방식과 기본값을 재정의하는 방식은 Apache Flink 설명서의 [최대 병렬 처리 설정](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#setting-the-maximum-parallelism)을 참조하세요.

기본 규칙으로 연산자에 `maxParallelism`을 정의하지 않고 애플리케이션을 병렬 처리 128 이하로 시작하면 모든 연산자의 `maxParallelism`은 128이 됩니다.

**참고**  
작업의 최대 병렬 처리는 상태를 유지하면서 애플리케이션을 조정할 수 있는 병렬 처리의 상한입니다.  
기존 애플리케이션의 `maxParallelism`을 수정하는 경우 이전 `maxParallelism`으로 생성된 스냅샷에서 애플리케이션을 다시 시작할 수 없습니다. 스냅샷 없어야만 애플리케이션 재시작이 가능합니다.  
애플리케이션을 병렬 처리 128보다 크게 규모 조정하려면 애플리케이션에서 `maxParallelism`을 명시적으로 설정해야 합니다.
+ Autoscaling 로직은 작업의 최대 병렬 처리를 초과하는 병렬 처리로 Flink 작업의 규모를 조정하는 것을 방지합니다.
+ 사용자 지정 자동 크기 조정 또는 예약된 규모 조정을 사용하는 경우 작업의 최대 병렬 처리를 초과하지 않도록 구성해야 합니다.
+ 애플리케이션이 최대 병렬 처리를 초과하도록 수동으로 규모 조정하면 애플리케이션이 시작되지 않습니다.