Apache Beam 應用程式檢查點失敗 - Managed Service for Apache Flink

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

Apache Beam 應用程式檢查點失敗

如果設定 Beam 應用程式時將 shutdownSourcesAfterIdleMs 設定為 0ms,則檢查點可能無法觸發,因為任務處於「FINISHED」狀態。本節說明此狀況的徵狀和解決方案。

徵狀

前往 Managed Service for Apache Flink 應用程式 CloudWatch 日誌,檢查其中是否記錄了下列日誌訊息。下列日誌訊息指出檢查點無法觸發,因為某些任務已完成。

{ "locationInformation": "org.apache.flink.runtime.checkpoint.CheckpointCoordinator.onTriggerFailure(CheckpointCoordinator.java:888)", "logger": "org.apache.flink.runtime.checkpoint.CheckpointCoordinator", "message": "Failed to trigger checkpoint for job your job ID since some tasks of job your job ID has been finished, abort the checkpoint Failure reason: Not all required tasks are currently running.", "threadName": "Checkpoint Timer", "applicationARN": your application ARN, "applicationVersionId": "5", "messageSchemaVersion": "1", "messageType": "INFO" }

這也可以在 Flink 儀表板上找到,其中一些任務已進入「FINISHED」狀態,並且無法再執行檢查點。

任務處於「FINISHED」狀態

原因

shutdownSourcesAfterIdleMs 是 Beam 組態變數,可關閉閒置了一段設定時間 (毫秒) 的來源。一旦來源關閉,無法再執行檢查點。這可能導致檢查點失敗

任務進入「FINISHED」狀態的其中一個原因是當 shutdownSourcesAfterIdleMs 設定為 0ms 時,意味著閒置的任務將立即關閉。

解決方案

若要防止任務立即進入「FINISHED」狀態,請將 shutdownSourcesAfterIdleMs 設定為 Long.MAX_VALUE。這可以透過兩種方式進行:

  • 選項 1:如果 Beam 組態是在 Managed Service for Apache Flink 應用程式的組態頁面中設定,則可以新增一個鍵值對來設定 shutdpwnSourcesAfteridleMs,如下所示:

    將 shutdownSourcesAfterIdleMs 設定為 Long.MAX_VALUE
  • 選項 2:如果 Beam 組態是在 JAR 檔案中設定,您可以按如下方式設定 shutdownSourcesAfterIdleMs:

    FlinkPipelineOptions options = PipelineOptionsFactory.create().as(FlinkPipelineOptions.class); // Initialize Beam Options object options.setShutdownSourcesAfterIdleMs(Long.MAX_VALUE); // set shutdownSourcesAfterIdleMs to Long.MAX_VALUE options.setRunner(FlinkRunner.class); Pipeline p = Pipeline.create(options); // attach specified options to Beam pipeline