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
の中で以下の設定パラメータを設定することで、この戦略はデフォルトで有効になります。
再起動戦略: 障害レート
設定パラメータ | 解説 | デフォルト値 |
---|---|---|
ジョブが失敗するまでに指定された時間間隔で再開する最大数 | 1 | |
障害レートを計測するための時間間隔 | 1分 | |
2つの連続する再開の試行間の遅延 |
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())
再開戦略が定義されたクラスタが使われます。これはチェックポイントが有効なストリーミングプログラムで役に立ちます。デフォルトでは、他の再開戦略が定義されていない場合は、固定の遅延再開戦略が選択されます。