This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
ZooKeeper HAサービス #
FlinkのZooKeeper HAサービスは高可用性サービスのためにZooKeeperを使います。
Flinkは実行中の全てのJobManagerインスタンス間の分散調整のために**ZooKeeper**を利用します。 ZooKeeperはFlinkとは別個のサービスで、リーダーの選定と軽量で一貫性のある状態のストレージを使ってとても信頼できる分散調整を提供します。 ZooKeeperの詳細については、ZooKeeperの開始ガイドをご覧ください。 Flinkはbootstrap a simple ZooKeeperインストレーションを起動するためのスクリプトを含みます。
設定 #
HAクラスタを開始するには、次の設定キーを設定する必要があります:
-
high-availability.type (必須):
high-availability.type
オプションはzookeeper
に設定する必要があります。high-availability.type: zookeeper
-
high-availability.storageDir (必須): JobManagerメタデータはファイルシステム
high-availability.storageDir
に保存され、この状態へのポインタのみがZooKeeperに保存されます。high-availability.storageDir: hdfs:///flink/recovery
storageDir
はJobManagerの障害を回復するために必要な全てのメタデータを保存します。 -
high-availability.zookeeper.quorum (必須): ZooKeeper quorumは分散調整サービスを提供するZooKeeperのレプリカグループです。
high-availability.zookeeper.quorum: address1:2181[,...],addressX:2181
各
addressX:port
はZooKeeperサーバを指し、指定されたアドレスとポートでFlinkから到達可能です。 -
high-availability.zookeeper.path.root (推奨): root ZooKeeper node。その下に必要な全てのクラスタノードが配置されます。
high-availability.zookeeper.path.root: /flink
-
high-availability.cluster-id (推奨): cluster-id ZooKeeper node。その下にクラスタに必要な全ての調整データが配置されます。
high-availability.cluster-id: /default_ns # important: customize per cluster
重要: YARN、ネイティブKubernetes、その他のクラスタマネージャ上で実行している場合は、この値を手動で設定しないでください。 そのような場合、クラスタidが自動的に生成されます。 ベアメタル上で複数のFlink HAクラスタを実行している場合は、クラスタごとに個別のクラスタIDを手動で設定する必要があります。
設定例 #
conf/flink-conf.yaml
で高可用性モードとZooKeeper quorumを設定します:
high-availability.type: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_one # important: customize per cluster
high-availability.storageDir: hdfs:///flink/recovery
ZooKeeperのセキュリティの設定 #
ZooKeeperがKerberosを使ってセキュアモードで動作している場合、必要に応じてflink-conf.yaml
内の以下の設定を上書きすることができます:
# default is "zookeeper". If the ZooKeeper quorum is configured
# with a different service name then it can be supplied here.
zookeeper.sasl.service-name: zookeeper
# default is "Client". The value needs to match one of the values
# configured in "security.kerberos.login.contexts".
zookeeper.sasl.login-context-name: Client
KerberosセキュリティのFlink設定の詳細については、Flink設定ページのセキュリティのセクションを参照してください。 Flinkが内部的にKerberosベースのセキュリティをセットアップする方法についての詳細もご覧いただけます。
高度な設定 #
Tolerating Suspended ZooKeeper Connections #
デフォルトでは、FlinkのZooKeeperクライアントは中断されたZooKeeper接続をエラーとして扱います。 これは、Flinkがそのコンポーネントの全てのリーダーシップを無効にし、それによって接続が一時停止された場合にフェイルオーバーを引き起こすことを意味します。
この動作は場合によっては破壊的すぎる可能性があります(例えば、不安定なネットワーク環境)。 より積極的な方法をとる場合は、ZooKeeper接続の中断を許容し、high-availability.zookeeper.client.tolerate-suspended-connectionsを介して失われた接続だけをエラーとして扱うことができます。 この機能を有効にすると、一時的な接続問題に対するFlinkの回復力が高まりますが、ZooKeeperのタイミングの問題が発生するリスクも高まります。
詳細については、Curatorのエラー処理をご覧ください。
Bootstrap ZooKeeper #
ZooKeeperのインストールを実行していない場合は、Flinkに同梱されているヘルパースクリプトを使うことができます。
ZooKeeperの設定テンプレートはconf/zoo.cfg
にあります。
server.X
エントリを使ってZooKeeperを実行するサーバを設定することができます。Xは各サーバのユニークなIDです:
server.X=addressX:peerPort:leaderPort
[...]
server.Y=addressY:peerPort:leaderPort
スクリプトbin/start-zookeeper-quorum.sh
は設定された各ホスト上でZooKeeperを開始するでしょう。
開始されたプロセスはFlinkラッパーを経由してZooKeeperを起動します。これはconf/zoo.cfg
から設定を読み込み、利便性のために幾つかの必須の設定値が設定されるようにします。
プロダクションのセットアップでは、独自のZooKeeperインストレーションを管理することをお勧めします。