Zookeeper-api
Zookeeper-API
ZooKeeperには、JavaとCの公式APIバインディングがあります。 ZooKeeperコミュニティは、ほとんどの言語(.NET、pythonなど)に非公式のAPIを提供しています。 ZooKeeper APIを使用すると、アプリケーションは、ZooKeeperアンサンブルとの接続、対話、データの操作、調整、および最終的な切断を行うことができます。
ZooKeeper APIには、ZooKeeperアンサンブルのすべての機能をシンプルかつ安全な方法で取得するための豊富な機能セットがあります。 ZooKeeper APIは、同期メソッドと非同期メソッドの両方を提供します。
ZooKeeperアンサンブルとZooKeeper APIは、あらゆる面でお互いを完全に補完し、開発者に大きなメリットをもたらします。 この章では、Javaバインディングについて説明します。
ZooKeeper APIの基本
ZooKeeperアンサンブルと対話するアプリケーションは、 ZooKeeper Client または単に Client と呼ばれます。
ZnodeはZooKeeperアンサンブルのコアコンポーネントであり、ZooKeeper APIはZooKeeperアンサンブルでznodeのすべての詳細を操作するためのメソッドの小さなセットを提供します。
クライアントは、以下に示す手順に従って、ZooKeeperアンサンブルと明確かつクリーンな対話を行う必要があります。
- ZooKeeperアンサンブルに接続します。 ZooKeeperアンサンブルは、クライアントにセッションIDを割り当てます。
- サーバーにハートビートを定期的に送信します。 そうでない場合、ZooKeeperアンサンブルはセッションIDを失効させ、クライアントは再接続する必要があります。
- セッションIDがアクティブである限り、znodeを取得/設定します。
- すべてのタスクが完了したら、ZooKeeperアンサンブルから切断します。 クライアントが長時間アクティブでない場合、ZooKeeperアンサンブルは自動的にクライアントを切断します。
Javaバインディング
この章で、ZooKeeper APIの最も重要なセットを理解しましょう。 ZooKeeper APIの中心部分は* ZooKeeperクラス*です。 ZooKeeperアンサンブルをコンストラクターで接続するオプションを提供し、次のメソッドがあります-
- connect -ZooKeeperアンサンブルに接続します
- create -znodeを作成します
- exists -znodeが存在するかどうかとその情報を確認します
- getData -特定のznodeからデータを取得する
- setData -特定のznodeにデータを設定します
- getChildren -特定のznodeで利用可能なすべてのサブノードを取得します
- delete -特定のznodeとそのすべての子を取得します
- close -接続を閉じる
ZooKeeper Ensembleに接続する
ZooKeeperクラスは、コンストラクターを介して接続機能を提供します。 コンストラクタの署名は次のとおりです-
どこで、
- connectionString -ZooKeeperアンサンブルホスト。
- sessionTimeout -ミリ秒単位のセッションタイムアウト。
- watcher -「Watcher」インターフェースを実装するオブジェクト。 ZooKeeperアンサンブルは、ウォッチャーオブジェクトを介して接続ステータスを返します。
新しいヘルパークラス ZooKeeperConnection を作成し、メソッド connect を追加しましょう。 connect メソッドは、ZooKeeperオブジェクトを作成し、ZooKeeperアンサンブルに接続して、オブジェクトを返します。
ここで、 CountDownLatch は、クライアントがZooKeeperアンサンブルに接続するまでメインプロセスを停止(待機)するために使用されます。
ZooKeeperアンサンブルは、* Watcherコールバック*を介して接続ステータスを返信します。 クライアントがZooKeeperアンサンブルに接続すると、Watcherコールバックが呼び出され、Watcherコールバックは、 CountDownLatch の countDown メソッドを呼び出して、メインプロセスでロック、 await を解放します。
ZooKeeperアンサンブルに接続するための完全なコードは次のとおりです。
コーディング:ZooKeeperConnection.java
上記のコードを保存すると、次のセクションでZooKeeperアンサンブルを接続するために使用されます。
Znodeを作成する
ZooKeeperクラスは、ZooKeeperアンサンブルに新しいznodeを作成する* createメソッド*を提供します。 *作成*メソッドの署名は次のとおりです-
どこで、
- path -Znodeパス。 たとえば、/myapp1、/myapp2、/myapp1/mydata1、myapp2/mydata1/myanothersubdata
- data -指定されたznodeパスに保存するデータ
- acl -作成されるノードのアクセス制御リスト。 ZooKeeper APIは、基本的なACLリストの一部を取得するための静的インターフェイス ZooDefs.Ids を提供します。 たとえば、ZooDefs.Ids.OPEN_ACL_UNSAFEは、開いているznodeのaclのリストを返します。
- createMode -一時的、シーケンシャル、またはその両方のノードのタイプ。 これは enum です。
ZooKeeper APIの*作成*機能を確認するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKCreate.java を作成します。 mainメソッドで、タイプ ZooKeeperConnection のオブジェクトを作成し、 connect メソッドを呼び出してZooKeeperアンサンブルに接続します。
connectメソッドは、ZooKeeperオブジェクト zk を返します。 次に、カスタム path および data を使用して zk オブジェクトの create メソッドを呼び出します。
znodeを作成するための完全なプログラムコードは次のとおりです-
コーディング:ZKCreate.java
アプリケーションがコンパイルおよび実行されると、指定されたデータを持つznodeがZooKeeperアンサンブルに作成されます。 ZooKeeper CLI zkCli.sh を使用して確認できます。
存在する-Znodeの存在を確認する
ZooKeeperクラスは、znodeの存在を確認する* existsメソッド*を提供します。 指定されたznodeが存在する場合、znodeのメタデータを返します。 *存在する*メソッドの署名は次のとおりです-
どこで、
- path -Znodeパス
- watcher -指定されたznodeを監視するかどうかを指定するブール値
ZooKeeper APIの「存在する」機能を確認する新しいJavaアプリケーションを作成しましょう。 ファイル_“ ZKExists.java” を作成します。 メインメソッドで、“ ZooKeeperConnection” オブジェクトを使用してZooKeeperオブジェクト“ zk” を作成します。 次に、カスタム“パス” で“ zk” オブジェクトの“ exists” _メソッドを呼び出します。 完全なリストは次のとおりです-
コーディング:ZKExists.java
アプリケーションをコンパイルして実行すると、次の出力が得られます。
getDataメソッド
ZooKeeperクラスは、指定されたznodeに添付されたデータとそのステータスを取得する getData メソッドを提供します。 getData メソッドのシグネチャは次のとおりです-
どこで、
- path -Znodeパス。
- watcher -タイプ Watcher のコールバック関数。 ZooKeeperアンサンブルは、指定されたznodeのデータが変更されると、Watcherコールバックを介して通知します。 これは1回限りの通知です。
- stat -znodeのメタデータを返します。
ZooKeeper APIの getData 機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKGetData.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、カスタムパスを使用してzkオブジェクトの getData メソッドを呼び出します。
指定されたノードからデータを取得するための完全なプログラムコードは次のとおりです-
コーディング:ZKGetData.java
アプリケーションをコンパイルして実行すると、次の出力が得られます
そして、アプリケーションは、ZooKeeperアンサンブルからのさらなる通知を待ちます。 ZooKeeper CLI zkCli.sh を使用して、指定したznodeのデータを変更します。
これで、アプリケーションは次の出力を出力して終了します。
setDataメソッド
ZooKeeperクラスは、指定されたznodeに添付されたデータを変更するための setData メソッドを提供します。 setData メソッドのシグネチャは次のとおりです-
どこで、
- path -Znodeパス
- data -指定されたznodeパスに保存するデータ。
- version -znodeの現在のバージョン。 ZooKeeperは、データが変更されるたびにznodeのバージョン番号を更新します。
ZooKeeper APIの setData 機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKSetData.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、指定されたパス、新しいデータ、ノードのバージョンを使用して、 zk オブジェクトの setData メソッドを呼び出します。
以下は、指定されたznodeに添付されたデータを変更するための完全なプログラムコードです。
コード:ZKSetData.java
アプリケーションをコンパイルして実行すると、指定したznodeのデータが変更され、ZooKeeper CLIの zkCli.sh を使用して確認できます。
getChildrenメソッド
ZooKeeperクラスは、特定のznodeのすべてのサブノードを取得する getChildren メソッドを提供します。 getChildren メソッドのシグネチャは次のとおりです-
どこで、
- path -Znodeパス。
- watcher -タイプ「Watcher」のコールバック関数。 ZooKeeperアンサンブルは、指定されたznodeが削除されるか、znodeの下の子が作成/削除されると通知します。 これは1回限りの通知です。
コーディング:ZKGetChildren.java
プログラムを実行する前に、ZooKeeper CLI zkCli.sh を使用して、 /MyFirstZnode の2つのサブノードを作成します。
これで、プログラムをコンパイルして実行すると、上記で作成したznodeが出力されます。
Znodeを削除する
ZooKeeperクラスは、指定されたznodeを削除する delete メソッドを提供します。 *削除*メソッドの署名は次のとおりです-
どこで、
- path -Znodeパス。
- version -znodeの現在のバージョン。
ZooKeeper APIの*削除*機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKDelete.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、指定された path とノードのバージョンで zk オブジェクトの delete メソッドを呼び出します。
znodeを削除するための完全なプログラムコードは次のとおりです-