

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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 的限制 `ParallelismPerKPU` 乘以 (預設值為 64)。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>

Managed Service for Apache Flink 以 KPU 的形式佈建容量。單一 KPU 可為您提供 1 個 vCPU 和 4 GB 的記憶體。針對每個配置的 KPU，還會提供 50 GB 的執行中應用程式儲存體。

Managed Service for Apache Flink 會使用 `Parallelism` 和 `ParallelismPerKPU` 屬性計算執行應用程式所需的 KPU，如下所示：

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

Managed Service for Apache Flink 可快速提供應用程式資源，以因應輸送量或處理活動尖峰。它會在活動尖峰過去後逐漸從應用程式中移除資源。若要停用資源的自動配置，請將 `AutoScalingEnabled` 值設定為 `false`，如稍後 [更新應用程式的平行處理](#how-scaling-howto) 中所述。

應用程式的 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"
         }
      }
   }
}
```

## 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`應用程式中明確設定 。
+ 自動擴展邏輯可防止將 Flink 任務擴展到超過任務最大平行處理的平行處理。
+ 如果您使用自訂自動擴展或排程擴展，請將它們設定為不超過任務的最大平行處理。
+ 如果您手動擴展應用程式超過最大平行處理，則應用程式無法啟動。