為什麼我的 Amazon Kinesis Data Analytics 應用程式中的檢查點失敗?

上次更新日期:2022 年 2 月 25 日

我的 Amazon Kinesis Data Analytics 應用程式中的檢查點或儲存點出現故障。

簡短描述

檢查點是用於在 Amazon Kinesis Data Analytics for Apache Flink 中實作容錯的方法。未經過最佳化或正確佈建的應用程式可能會導致檢查點失敗。

引發檢查點故障的一些主要原因如下:

  • 對於 Rocks DB,Apache Flink 從本機儲存讀取檔案並寫入遠程持久性儲存,即 Amazon Simple Storage Service (Amazon S3)。本機磁碟的效能和上傳速率可能會影響檢查點並引發檢查點故障。
  • 儲存點和檢查點狀態儲存在服務擁有的完全受 AWS 管理的 Amazon S3 儲存貯體中。當應用程式進行容錯轉移時,就會存取這些狀態。此 S3 儲存貯體中的暫時性伺服器錯誤或延遲可能會引發檢查點故障。
  • 對於您在檢查點期間建立的與外部資源 (如 Amazon DynamoDB) 進行通訊的流程函數,其可能會引發檢查點故障。
  • 由於狀態序列化而造成的失敗 (例如序列化程式與傳入資料不相符) 可能會引發檢查點故障。
  • 為應用程式佈建的 Kinesis 處理單元 (KPU) 數量可能不充分。要查找分配的 KPU,請使用以下計算公式:
    為應用程式分配的 KPU = Parallelism / ParallelismPerKPU
  • 更大規模的應用程式狀態可能會增加檢查點的延遲。這是因為,任務管理器需要更多的時間來儲存檢查點,這可能會引發記憶體不足的例外狀況。
  • 與其他任務管理器相比,狀態分佈偏差可能會導致某個任務管理器處理更多的資料。即使佈建了足夠的 KPU (資源),一個或多個過載的任務管理器也可能會引發記憶體不足的例外狀況。
  • 高基數表示傳入資料中存在大量的唯一金鑰。如果任務使用 KeyBy 運算子對傳入資料進行分割,並且用於對資料進行分割的金鑰具有較高的基數,則可能會引發緩慢執行的檢查點。這最終可能會導致檢查點故障。

解決方案

  • 應用程式狀態的大小可能會迅速增加,從而導致檢查點大小和持續時間的增加。您可以使用 Amazon CloudWatch 指標 lastCheckPointDurationlastCheckpointSize 監控這些值。有關詳資訊,請參閲應用程式指標
  • 提高處理更多資料的運算子的並行度。可以透過叫用 setParallelism() 方法來定義單個運算子、資料來源或資料匯點的並行度。
  • 調整 Parallelism 和 ParallelismPerKPU 的值,以實現 KPU 的最佳利用率。確保您的 Amazon Kinesis Data Analytics 應用程式沒有關閉自動擴展功能。MaxPalallelism 參數的值可讓您擴展到所需數量的 KPU。如需詳細資訊,請參閱 Amazon Kinesis Data Analytics for Apache Flink 中的應用程式擴展
  • 在狀態上定義 TTL 以確保定期清除狀態。
  • 最佳化程式碼以實現更理想的分割策略。您可以使用重新平衡分割來幫助均勻分佈資料。此方法使用輪詢均衡方法進行分佈。
  • 最佳化程式碼以縮減視窗大小,從而減少該視窗中金鑰數的基數。

此文章是否有幫助?


您是否需要帳單或技術支援?