This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
高可用性 #
JobManager高可用性(HA)は、JobManagerの障害に対してFlinkクラスタを強化します。 この機能により、Flinkクラスタは送信されたジョブを常に実行し続けることが保証されます。
JobManagerの高可用性 #
ジョブマネージャーは全てのFlinkのデプロイを調整します。 スケジューリングとリソース管理の両方を担当します。
デフォルトでは、1つのFlinkあたり1つのジョブマネージャーがあります。 これは単一障害点 (SPOF)を作ります: もしJobManagerがクラッシュすると、新しいプログラムは送信されず実行中のプログラムが失敗します。
JobManagerの高可用性を使って、JobManagerの障害から回復することができ、それによってSPOFを取り除きます。 全てのクラスタデプロイメントに対して高可用性を設定できます。 詳細については、利用可能な高可用性サービスのリストを参照してください。
クラスタの可用性を高める方法 #
JobManagerの高可用性の一般的な考え方は、常に1つのリーディングJobManagerが存在し、リーダーに障害が発生した時にリーダつぃっぷを引き継ぐ複数のスタンバイJobManagersがあるというものです。 これにより単一障害点が無いことが保証され、スタンバイJobManagerがリーダーシップを取り次第プログラムを進めることができることを保証します。
例として、以下の3つのJobManagerインスタンスを持つセットアップを考えます:
Flinkの高可用性サービスは、全てを機能させるために必要なサービスをカプセル化します:
- リーダー選出:
n
個の候補のプールから1つのリーダーを選出します - Service discovery: 現在のリーダーのアドレスを取得します
- 状態の永続性: 継承者がジョブの実行を再開するために必要な状態の永続化(JobGraphs、ユーザコードのjars、完了したチェックポイント)
高可用性サービス #
Flinkには2つの高可用性サービスの実装が付属しています。
-
ZooKeeper: ZooKeeper HAサービスは全てのFlinkクラスタデプロイメントで使えます。 実行中のZooKeeper quorumを必要とします。
-
Kubernetes: Kubernetes HAサービスはKubernetes上で実行されている場合のみ機能します。
高可用性データのライフサイクル #
送信されたジョブを回復するために、Flinkはメタデータとジョブartifactsを永続化します。 HAデータは、それぞれのジョブが成功するか、キャンセルされるか、最終的に失敗するまで保持されます。 これが発生すると、HAサービスに保存されているメタデータを含む全てのHAデータが削除されます。
JobResultStore #
JobResultStoreはグローバル終了状態(つまり、完了、キャンセル、失敗)に到達したジョブの最終結果を圧縮するために使われます。データはファイルシステムに保存されます(job-result-store.storage-pathを参照)。 対応するジョブが適切にクリーンアップされない限り、このストアのエントリはダーティとしてマークされます(artifactsはhigh-availability.storageDirのジョブのサブフォルダにあります)。
ダーティなエントリはクリーンアップの対象になります。つまり、対応するジョブは現時点でFlinkによってクリーンアップされるか、回復の一環としてクリーンアップのために選択されます。クリーンアップが成功すると、エントリはすぐに削除されます。 soon as the cleanup succeeds. 動作を適用させる方法の詳細については、HA設定オプションにあるJobResultStore設定パラメータを確認してください。