

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

# 實現 Managed Service for Apache Flink 應用程式的生產準備
<a name="production-readiness"></a>

這是在 Managed Service for Apache Flink 上執行生產應用程式的重要方面的集合。這不是一份詳盡清單，而是在將應用程式投入生產環境之前應該注意的最基本的事項。

## 負載測試您的應用程式
<a name="load-testing-applications"></a>

應用程式的某些問題僅在高負載下才會表現出來。我們看到應用程式看起來運作狀態良好，但操作事件大幅擴大了應用程式的負載。這可以完全獨立於應用程式本身。如果資料來源或資料接收器無法使用幾個小時，則 Flink 應用程式無法進行進度。當此問題已修正時，會有已累積的未處理資料待處理項目，這可能會完全耗盡可用的資源。然後，負載可以放大之前未出現的錯誤或效能問題。

因此，您必須為生產應用程式執行適當的負載測試。在這些負載測試期間應回答的問題包括：
+ 應用程式在持續高負載下是否穩定？
+ 應用程式在尖峰負載下是否仍可取得儲存點？
+ 處理 1 小時的待辦項目需要多長時間？ 如果是 24 小時，將需要多長時間 (取決於串流中資料的最大保留時間)？
+ 應用程式擴展時，其輸送量是否會增加？

從資料串流使用時，可以透過產生到串流中一段時間來模擬這些案例。然後啟動應用程式，並讓它從一開始就取用資料。例如，`TRIM_HORIZON`在 Kinesis 資料串流的情況下，使用 的開始位置。

## 定義最大平行處理
<a name="explicit-max-parallelism"></a>

最大平行處理層級定義具有狀態的應用程式可擴展至的最大平行處理層級。這在首次建立狀態時定義，並且無法在不放棄狀態的情況下將運算子擴展到超出此最大值。

在第一次建立狀態時，會設定最大平行處理。

根據預設，最大平行處理設定為：
+ 128：如果平行處理層級 <= 128
+ `MIN(nextPowerOfTwo(parallelism + (parallelism / 2)), 2^15)`：如果平行處理層級 > 128

如果您打算擴展應用程式 > 128 個平行處理，您應該明確定義最大平行處理。

您可以使用 `env.setMaxParallelism(x)`或單一運算子，在應用程式層級定義最大平行處理。除非另有指定，否則所有運算子都會繼承應用程式的最大平行處理。

如需詳細資訊，請參閱 Apache Flink 文件中的[設定平行處理上限](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/dev/datastream/execution/parallel/#setting-the-maximum-parallelism)。

## 為所有運算子設定 UUID
<a name="set-uuid"></a>

在 Flink 將儲存點映射回個別運算子的操作中，會使用 UUID。為每個運算子設定特定的 UUID 可以為要還原的儲存點程序提供穩定映射。

```
.map(...).uid("my-map-function")
```

如需詳細資訊，請參閱[生產就緒性檢查清單](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/ops/production_ready/)。