ストラテジの再実行

Flinkは障害時にジョブがどのように再起動するかを制御する異なる再起動戦略をサポートします。ジョブに固有ではない再起動戦略が定義された時に常に使われるデフォルトの再起動戦略を使ってクラスタを起動することができます。ジョブが再起動戦略を伴ってサブミットされた場合、この戦略はクラスタのデフォルトの設定を上書きします:

概要

デフォルトの再起動戦略はFlinkの設定ファイルflink-conf.yamlを使って設定されます。設定パラメータrestart-strategyはどの戦略が取られるかを定義します。もしチェックポイントが有効ではない場合、“no restart” 戦略が使われます。もしチェックポイントが有効で、再起動戦略が設定されていない場合、固定の遅延戦略がInteger.MAX_VALUE回の再起動の試行を伴って使われます。どの値がサポートされるかを学ぶために、以下の利用可能な再起動戦略のリストを見てください。

各再起動戦略はその挙動を制御するパラメータの固有のセットが付属しています。これらの値は設定ファイルの中でも設定されます。各再起動戦略の説明にはそれぞれの設定値についてのより多くの情報が含まれます。

再起動戦略 再起動戦略の値
固定の遅延 fixed-delay
障害レート failure-rate
再起動無し none

デフォルトの再起動戦略の定義とは別に、各Flinkのジョブについて特定の再起動戦略を定義することが可能です。この再起動戦略はExecutionEnvironment上でsetRestartStrategyメソッドを呼び出すことでプログラム的に設定することができます。これはStreamExecutionEnvironmentについても動作することに注意してください。

以下の例はジョブに固定の遅延再起動戦略をどうやって設定することができるかを示します。障害時には、システムはジョブを3回再起動しようとし、連続する再起動の試行の間で10秒間待ちます。

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

上に戻る

ストラテジの再実行

以下の章では、特定の再起動戦略の設定オプションについて説明します。

固定の遅延再起動戦略

固定の遅延再起動戦略はジョブの再起動を指定された回数だけ試そうとします。もし指向の最大数が超過するとジョブは結果的に失敗します。2つの連続する再起動の試行の間で、再起動戦略は固定の時間を待ちます。

flink-conf.yamlの中で以下の設定パラメータを設定することで、この戦略はデフォルトで有効になります。

再起動戦略: 固定の遅延
設定パラメータ 解説 デフォルト値
restart-strategy.fixed-delay.attempts ジョブが失敗したと宣言される前にFlinkが実行を指向する回数。 1 あるいは チェックポイントによって有効にされた場合Integer.MAX_VALUE
restart-strategy.fixed-delay.delay 再試行の遅延は実行の失敗の後で再実行がすぐには開始されないが一定の遅延の後でのみ開始されることを意味します。再試行の遅延はプログラムの外部システムとの相互作用、例えば接続あるいはトランザクションの待ちが再実行が試みられる前にタイムアウトに達する必要がある場合に役に立ちます。 akka.ask.timeout あるいはチェックポイントによって有効にされた場合 10秒

例えば:

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

固定の遅延再起動戦略はプログラム的に設定することもできます:

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

上に戻る

障害レートの再起動戦略

障害レートの再起動戦略は障害の後でジョブを再起動しますが、failure rate (時間間隔ごとの障害) を超えると、ジョブは結果的に失敗します。2つの連続する再起動の試行の間で、再起動戦略は固定の時間を待ちます。

flink-conf.yamlの中で以下の設定パラメータを設定することで、この戦略はデフォルトで有効になります。

再起動戦略: 障害レート
設定パラメータ 解説 デフォルト値
restart-strategy.failure-rate.max-failures-per-interval ジョブが失敗するまでに指定された時間間隔で再開する最大数 1
restart-strategy.failure-rate.failure-rate-interval 障害レートを計測するための時間間隔 1分
restart-strategy.failure-rate.delay 2つの連続する再開の試行間の遅延 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

障害レート再開戦略はプログラム的に設定することもできます:

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // max failures per interval
  Time.of(5, TimeUnit.MINUTES), //time interval for measuring failure rate
  Time.of(10, TimeUnit.SECONDS) // delay
));
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
))

上に戻る

再起動しない戦略

ジョブはすぐに失敗し、再開の試行はされません。

restart-strategy: none

再起動しない戦略はプログラム的に設定することもできます:

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

後退する再起動戦略

再開戦略が定義されたクラスタが使われます。これはチェックポイントが有効なストリーミングプログラムで役に立ちます。デフォルトでは、他の再開戦略が定義されていない場合は、固定の遅延再開戦略が選択されます。

上に戻る

TOP
inserted by FC2 system