1、Flink Managing Execution - Task Failure Recovery(Flink Task 故障恢復)

當任務失敗時,Flink 需要重新啓動失敗的任務和其他受影響的任務,將作業恢復到正常狀態。

重新啓動策略和故障轉移策略用於控制任務重新啓動。重新啓動策略決定是否以及何時可以重新啓動失敗/受影響的任務。故障轉移策略決定應該重新啓動哪些任務以恢復作業。

重啓策略

可以使用默認的重啓策略來啓動集羣,在沒有定義特定於作業的重啓策略時,總是使用默認的重啓策略。如果提交的作業帶有重啓策略,該策略將覆蓋集羣的默認設置。

默認的重啓策略是通過 Flink 的配置文件 flink-conf.yaml 設置的。配置參數重新啓動策略定義了採取哪種策略。如果沒有啓用檢查點,則使用“no restart”策略。如果檢查點被激活,並且沒有配置重啓策略,則使用 Integer.MAX_VALUE 的固定延遲策略重啓嘗試。請參閱下面的可用重啓策略列表,以瞭解支持哪些值。

每個重啓策略都有自己的一組參數來控制其行爲。這些值也在配置文件中設置。每個重新啓動策略的描述包含有關各自配置值的更多信息。

Restart Strategy Value for restart-strategy
Fixed delay fixed-delay
Failure rate failure-rate
No restart none

除了定義默認的重啓策略外,還可以爲每個 Flink 作業定義一個特定的重啓策略。此重新啓動策略是通過調用 ExecutionEnvironment 上的 setRestartStrategy 方法以編程方式設置的。注意,這也適用於 StreamExecutionEnvironment。

下面的示例演示如何爲作業設置固定延遲重新啓動策略。在失敗的情況下,系統嘗試重新啓動作業3次,並在連續的重新啓動嘗試之間等待10秒。

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // number of restart attempts
  Time.of(10, TimeUnit.SECONDS) // delay
))

下面幾節描述特定於重啓策略的配置選項。

Fixed Delay Restart Strategy

固定延遲重新啓動策略嘗試給定次數來重新啓動作業。如果超過了最大嘗試次數,作業最終會失敗。在兩次連續的重啓嘗試之間,重啓策略等待固定的時間。

通過在flink- confi.yaml中設置以下配置參數,可以將此策略作爲默認啓用。

restart-strategy: fixed-delay
Configuration Parameter Description Default Value
restart-strategy.fixed-delay.attempts 在作業被聲明爲失敗之前,Flink重試執行的次數。 如果啓用檢查點,more之爲1, 或 Integer.MAX_VALUE 
restart-strategy.fixed-delay.delay 延遲重試意味着在執行失敗後,重新執行不會立即開始,而是在一定的延遲之後纔開始。當程序與外部系統交互時(例如連接或掛起的事務在嘗試重新執行之前應該達到超時),延遲重試可能很有幫助。 如果啓用檢查點,默認值爲akka.ask.timeout, or 10s 

For example:

restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 10 s

固定延遲重啓策略也可程序設置:

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // number of restart attempts
  Time.of(10, TimeUnit.SECONDS) // delay
))

Failure Rate Restart Strategy

故障率重新啓動策略在失敗後重新啓動作業,但是當超過故障率(每個時間間隔的失敗)時,作業最終失敗。在兩次連續的重啓嘗試之間,重啓策略等待固定的時間。

通過在flink- confi.yaml中設置以下配置參數,可以將此策略作爲默認啓用。

restart-strategy: failure-rate
Configuration Parameter Description Default Value
restart-strategy.failure-rate.max-failures-per-interval 失敗作業前給定時間間隔內的最大重啓次數 1
restart-strategy.failure-rate.failure-rate-interval 測量故障率的時間間隔。 1 minute
restart-strategy.failure-rate.delay 兩次連續重啓嘗試之間的延遲 akka.ask.timeout
restart-strategy.failure-rate.max-failures-per-interval: 3
restart-strategy.failure-rate.failure-rate-interval: 5 min
restart-strategy.failure-rate.delay: 10 s

故障率重啓策略也可以通過程序設置:

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // max failures per unit
  Time.of(5, TimeUnit.MINUTES), //time interval for measuring failure rate
  Time.of(10, TimeUnit.SECONDS) // delay
))

No Restart Strategy

作業直接失敗,沒有嘗試重新啓動。

restart-strategy: none

無重啓策略也可以通過代碼設置:

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.noRestart())

Fallback Restart Strategy

使用集羣定義的重啓策略。這對於支持檢查點的流程序很有幫助。默認情況下,如果沒有定義其他重啓策略,則選擇固定延遲重啓策略。

故障恢復策略

Flink 支持不同的故障轉移策略,可以通過配置 flink-conf.yaml 中的 jobmanager.execution.failover-strategy 參數控制。

Failover Strategy Value for jobmanager.execution.failover-strategy
Restart all full
Restart pipelined region region

重新啓動所有故障轉移策略

此策略重新啓動作業中的所有任務以從任務失敗中恢復。

Restart Pipelined Region Failover Strategy

這種策略把任務分成互不相連的區域。當檢測到任務失敗時,此策略計算必須重新啓動以從失敗中恢復的最小區域集。對於某些作業,與 Restart All Failover 策略相比,這會導致重新啓動的任務更少。

區域是一組通過流水線數據交換進行通信的任務。也就是說,批量數據交換表示一個區域的邊界:

  • DataStream作業或流表/SQL作業中的所有數據交換都是流水線的。
  • 默認情況下,批處理表/SQL作業中的所有數據交換都是成批處理的。
  • 數據集作業中的數據交換類型由ExecutionMode決定,可以通過ExecutionConfig設置該模式。

重新啓動的區域決定如下:

  • 包含失敗任務的區域將重新啓動。
  • 如果結果分區在被重新啓動的區域時不可用,產生結果分區的區域也將重新啓動。
  • 如果要重新啓動某個區域,則該區域的所有消費者區域也將重新啓動。這是爲了保證數據一致性,因爲不確定性處理或分區可能導致不同的分區。

 

原文地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/task_failure_recovery.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章