應用程式重新啟 - Managed Service for Apache Flink

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

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

應用程式重新啟

如果您的應用程式運作狀況不正常,其 Apache Flink 作業就會持續失敗並重新啟動。本節說明此狀況的徵狀和疑難排解步驟。

徵狀

這種情況可能有下列徵狀:

  • FullRestarts 指標不為零。此指標代表自您啟動應用程式後,應用程式作業已重新啟動的次數。

  • Downtime 指標不為零。此指標代表應用程式處於 FAILINGRESTARTING 狀態的毫秒數。

  • 應用程式日誌包含狀態變更 (變更為 RESTARTINGFAILED)。您可以使用下列日誌深入解析查詢,查詢應用程式 CloudWatch 記錄檔是否有這些狀態變更:分析錯誤:應用程式工作相關失敗

原因和解決方案

下列情況可能會導致您的應用程式變得不穩定並重複重新啟動:

  • 運算符拋出異常:如果未處理應用程序中的操作符中的任何異常,則應用程序將失敗(通過解釋操作符無法處理失敗)。應用程式會從最新的檢查點重新啟動,以維護「恰好一次」的處理語義。因此,Downtime 在這些重新啟動期間不為零。為了防止這種情況發生,我們建議您處理應用程式程式碼中的任何可重試的例外狀況。

    您可以查詢應用程式日誌中是否包含從 RUNNINGFAILED 的應用程式狀態變更,以調查此情況的原因。如需詳細資訊,請參閱 分析錯誤:應用程式工作相關失敗

  • Kinesis 資料串流未正確佈建:如果應用程式的來源或接收器是 Kinesis 資料串流,請檢查串流的指標ReadProvisionedThroughputExceededWriteProvisionedThroughputExceeded有錯誤。

    如果看到這些錯誤,您可以增加串流的碎片數目,以增加 Kinesis 串流的可用輸送量。如需詳細資訊,請參閱如何變更 Kinesis Data Streams 中的開放碎片數目?

  • 其他來源或接收器未正確佈建或不可用:確認應用程式是否正確佈建來源和接收器。檢查應用程式中使用的任何來源或接收器 (例如其他 AWS 服務或外部來源或目的地) 是否已妥善佈建、未遇到讀取或寫入節流,或是定期無法使用。

    如果您遇到相依服務的輸送量相關問題,請增加這些服務的可用資源,或調查任何錯誤或無法使用的原因。

  • 運算子未正確佈建:如果應用程式中其中一個運算子的執行緒上的工作負載未正確分配,則該運算子可能會超載,而應用程式可能會損毀。如需調整運算子平行處理的相關資訊,請參閱適當管理運算子擴展

  • 應用程式失敗 DaemonException:如果您使用的是 1.11 之前的 Apache Flink 版本,則應用程式記錄檔中會顯示此錯誤。您可能需要升級至更新版本的 Apache Flink,以便使用 0.14 或更新版本的 KPL。

  • 應用程式失敗 TimeoutException,顯示 FlinkException、或 RemoteTransportException:如果工作管理員當機,這些錯誤可能會出現在應用程式記錄檔中。如果應用程式超載,任務管理員可能會遇到 CPU 或記憶體資源壓力,導致它們失敗。

    這些錯誤可能如下所示:

    • java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out

    • org.apache.flink.util.FlinkException: The assigned slot xxx was removed

    • org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager

    若要疑難排解此狀況,請檢查下列各項:

    • 檢查您的 CloudWatch 指標是否有 CPU 或記憶體使用量的異常峰值。

    • 檢查應用程式以了解是否有輸送量問題。如需詳細資訊,請參閱 解決效能問題

    • 檢查應用程式日誌以了解是否有應用程式程式碼所引發的未處理例外狀況。

  • 應用程式失敗並顯示「找 JaxbAnnotationModule 不到」錯誤:如果您的應用程式使用 Apache Beam,但沒有正確的相依性或相依性版本,就會發生此錯誤。使用 Apache Beam 的 Managed Service for Apache Flink 應用程式必須使用以下版本的相依性:

    <jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>

    如果您未提供正確的 jackson-module-jaxb-annotations 版本作為明確的相依性,應用程式會從環境相依性載入該版本,而由於版本不相符,應用程式會在執行期損毀。

    如需將 Apache Beam 與 Managed Service for Apache Flink 搭配使用的詳細資訊,請參閱搭 CloudFormation 配 Apache Flink 的受管理服務搭配使用

  • 應用程式失敗,並顯示 java.io.IOException:網路緩衝區數目不足

    當應用程式為網路緩衝區配置的記憶體不足時,就會發生這種情況。網路緩衝區可協助子任務之間的通信。它們用於在透過網路傳輸之前存儲記錄,並在將其解析為記錄並移交給子任務之前存儲傳入的資料。所需的網路緩衝區數目可直接根據作業圖表的平行處理層級和複雜度擴展。有許多方法可以緩解此問題:

    • 您可以設定較低的 parallelismPerKpu,以便為每個子任務和網路緩衝區配置更多記憶體。請注意,降低 parallelismPerKpu 會增加 KPU,因此會增加成本。為了避免這種情況,您可以按相同係數降低平行處理層級來保持相同數量的 KPU。

    • 您可以減少運算子的數目或將它們鏈結起來,以減少所需的緩衝區來簡化作業圖表。

    • 否則,您可以聯絡 https://aws.amazon.com/premiumsupport/ 進行自訂網路緩衝區組態。