

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

# 在 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"
         }
      }
   }
}
```

# 在 Managed Service for Apache Flink 中使用自動擴展
<a name="how-scaling-auto"></a>

Managed Service for Apache Flink 可彈性擴展應用程式的平行處理層級，以因應來源的資料輸送量和運算子在大多數情況下的複雜性。預設會啟用自動擴展。Managed Service for Apache Flink 會監控應用程式的資源 (CPU) 使用情況，並相應地彈性擴展應用程式的平行處理層級：
+ 如果 CloudWatch 指標最大值`containerCPUUtilization`大於 75% 或更高 15 分鐘，您的應用程式會縱向擴展 （增加平行處理）。這表示當 15 個連續資料點的 1 分鐘期間等於或超過 75% 時，就會啟動`ScaleUp`動作。`ScaleUp` 動作會將`CurrentParallelism`您應用程式的 加倍。 `ParallelismPerKPU` 不會修改。因此，配置KPUs 數量也會加倍。
+ 當 CPU 使用率維持在 10% 以下達 6小時時，應用程式會縮減規模 (減少平行處理層級)。這表示當有 360 個連續資料點且 1 分鐘期間小於 10% 時，就會啟動`ScaleDown`動作。`ScaleDown` 動作會減半 （四捨五入） 應用程式的平行處理。 `ParallelismPerKPU` 不會修改，配置KPUs 數量也會減半 （四捨五入）。

**注意**  
最多可以參考`containerCPUUtilization`超過 1 分鐘的期間，以尋找與用於擴展動作之資料點的關聯性，但不需要反映動作初始化時的確切時刻。

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 動作是 [StopApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)，且 `Force` 參數設定為 `true`。

您可以使用 `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) 的一部分) 來啟用或停用自動擴展行為。 AWS 您的帳戶會針對 Managed Service for Apache Flink 佈建的 KPUs 收費，這是應用程式`parallelism`和`parallelismPerKPU`設定的函數。活動尖峰會增加您的 Managed Service for Apache Flink 成本。

如需定價相關的資訊，請參閱 [Amazon Managed Service for Apache Flink 定價](https://aws.amazon.com/kinesis/data-analytics/pricing/)。

請留意下列與應用程式擴展相關的資訊：
+ 預設會啟用自動擴展。
+ 擴展不適用於 Studio 筆記本。不過，如果您將 Studio 筆記本部署為具有持久狀態的應用程式，則擴展將套用到已部署的應用程式。
+ 應用程式的預設限制為 64 個 KPU。如需詳細資訊，請參閱[Managed Service for Apache Flink 和 Studio 筆記本配額](limits.md)。
+ 當自動擴展更新應用程式的平行處理層級時，應用程式會經歷停機。若要避免停機，請執行下列動作：
  + 停用自動擴展
  + 使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 動作設定應用程式的 `parallelism` 和 `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)

  此範例說明如何使用與 Apache Flink 應用程式不同的 CloudWatch 指標來擴展 Managed Service for Apache Flink 應用程式，包括使用 Amazon MSK 和 Amazon Kinesis Data Streams 做為來源或接收器的指標。

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