我的 Amazon Kinesis Data Analytics for Apache Flink 應用程式正在重新啟動。
當任務失敗時,Apache Fink 應用程式將重新啟動失敗的任務和其他受影響的任務,以使作業處於正常狀態。
以下是這種情況的部分原因和相應的故障排除步驟:
代碼錯誤 (如 NullPointer 異常和 DataCast 類型) 在任務管理員中產生,並且昇至任務管理員。應用程式隨後會從最新的檢查點重新啟動。要偵測應用程式是否因應用程式中未處理的異常而重新啟動,請檢查 Amazon CloudWatch 指標 (例如 downtime)。此指標在重新啟動期間顯示非零值。要確定造成此情況的原因,請查詢應用程式日誌中的應用程式狀態是否從「運行中」變更為「失敗」。有關詳細資訊,請參閲分析錯誤:與應用程式任務相關的故障。
當出現記憶體不足異常時,工作管理員無法向作業管理員發送正常的活動訊號,進而導致應用程式重新啟動。在此情況下,您可能會在應用程式日誌中看到錯誤,例如 TimeoutException、FlinkException 或是 RemoteTransportException。檢查應用程式是否由於 CPU 或記憶體資源壓力而超載。
如果您的應用程式未充分佈建來源或接收,則在讀取和寫入串流服務 (如 Kinesis Data Streams) 時,應用程式可能會遇到調節錯誤。這種情況最終可能導致應用程式當機。使用 CloudWatch 指標 (例如 WriteProvisionedThroughputExceeded 和 ReadProvisionedThroughputExceeded) 檢查來源和接收的輸送量。考慮透過增碎片數目的方式擴充資料串流規模以容納資料量。
FlinkKinesisProducer 使用 Kinesis Producer Library (KPL) 將 Fink 串流中的資料放入 Kinesis 資料串流中。錯誤 (如逾時) 會導致 KPL 中的故障,最終可能導致 Fink 應用程式重新啟動。如果發生此情況,您可能會看到緩衝時間和重試次數的增加。您可以透過記錄不會過期的方式調整 KPL 的以下組態:RecordMaxBufferedTime、RecordTtl 和 RequestTimeout。同時,也可監控重要的 KPL 指標,例如 ErrorsByCode、RetriesPerRecord 和 UserRecordsPending。當這些指標指出應用程式正在重新啟動時,請使用 CloudWatch Logs Insights 中的篩選條件瞭解導致出現重新啟動錯誤的確切原因。
請注意,並非所有錯誤都會導致應用程式立即重新啟動。例如,應用程式程式碼中的錯誤可能會導致 DAG 工作流程錯誤。在這種情況下,不會建立應用程式的有向無環圖 (DAG)。應用程式將關閉,不會立即重新啟動。此外,當您收到「存取遭拒」錯誤時,應用程式不會立即重新啟動。
如果問題仍然存在,請聯絡 AWS Support 並提供以下資訊:
應用程式正在重新啟動