效能最佳實務 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。

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

效能最佳實務

本節說明針對效能設計應用程式時的特殊考量。

適當管理擴展

本節包含管理應用程式層級和運算子層級擴展的相關資訊。

適當管理應用程式擴展

您可以使用自動擴展來處理應用程式活動中的意外尖峰。如果符合下列條件,應用程式的 KPU 會自動增加:

  • 已為應用程式啟用自動擴展。

  • CPU 使用率在 15 分鐘內保持在 75% 以上。

如果已啟用自動擴展,但 CPU 使用率未維持在此閾值,則應用程式將不會縱向擴展 KPU。如果您遇到不符合此閾值的 CPU 使用率尖峰,或是不同使用量指標 (例如 heapMemoryUtilization) 中出現尖峰的情況,請手動增加擴展以允許應用程式處理活動尖峰。

注意

如果應用程式透過自動擴展自動新增了更多資源,則會在閒置一段時間後釋出新資源。縮減資源會暫時影響效能。

如需擴展的詳細資訊,請參閱擴展

適當管理運算子擴展

您可以透過驗證應用程式的工作負載在工作者處理序之間平均分配,以及應用程式中的運算子擁有穩定且高效能狀態所需的系統資源,藉此改善應用程式的效能。

您可以使用 parallelism 設定為應用程式程式碼中的每個運算子設定平行處理層級。如果您未為運算子設定平行處理層級,它就會使用應用程式層級的平行處理設定。使用應用程式層級平行處理設定的運算子可能會使用應用程式可用的所有系統資源,這會導致應用程式不穩定。

為了準確確定每個運算子的平行處理層級,請考慮該運算子與應用程式中其他運算子相比的相對資源需求。對比耗費更少資源的運算子,為耗費更多資源的運算子設定更高的運算子平行處理設定。

應用程式的運算子平行處理層級總數是應用程式中所有運算子的平行處理層級之總和。您可以決定應用程式的運算子平行處理層級總數與應用程式可用的任務空位總數之間的最佳比率,以調整應用程式的運算子平行處理層級總數。運算子平行處理層級與任務空位的典型穩定比率為 4:1,也就是說,應用程式每四個可用的運算子子任務就有一個任務空位可用。具有耗費更多資源的運算子的應用程式可能需要 3:1 或 2:1 的比率,而具有耗費更少資源的運算子的應用程式在比率為 10:1 時可能是穩定的。

您可以使用 運行時屬性 設定運算子的比率,以便調整運算子的平行處理層級,而無需編譯和上傳應用程式程式碼。

下列程式碼範例示範如何將運算子平行處理層級設定為目前應用程式平行處理層級的可調整比率:

Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties(); operatorParallelism = StreamExecutionEnvironment.getParallelism() / Integer.getInteger( applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio") );

如需子任務、任務空位和其他應用程式資源的相關資訊,請參閱應用程式資源

若要控制整個應用程式工作者處理序的工作負載分配,請使用 Parallelism 設定和 KeyBy 分割方法。如需詳細資訊,請參閱 Apache Flink 文件中的下列主題:

監控外部相依性資源使用量

如果目的地發生效能瓶頸 (例如 Kinesis 串流、Firehose、DynamoDB 或 OpenSearch 服務),您的應用程式將會遇到背壓。確認已針對應用程式輸送量正確佈建您的外部相依性。

注意

其他服務中的故障可能會導致應用程式失敗。如果您在應用程式中看到失敗,請檢查目的地服務的 CloudWatch 記錄檔是否有失敗。

在本機執行 Apache Flink 應用程式

若要疑難排解記憶體問題,您可以在本機 Flink 安裝中執行應用程式。這可讓您存取堆疊追蹤和堆積傾印等偵錯工具,在 Managed Service for Apache Flink 中執行應用程式時,這些工具不可用。

如需有關建立本機 Flink 安裝的資訊,請參閱 Apache Flink 說明文件中的獨立版