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