1. 概要

このクイックチュートリアルでは、ApacheKafkaクラスター内のすべてのトピックを一覧表示する方法を学習します。

まず、シングルノードのApacheKafkaおよびZookeeperクラスターをセットアップします。 次に、そのクラスターにそのトピックについて質問します。

2. Kafkaのセットアップ

Kafkaクラスター内のすべてのトピックを一覧表示する前に、次の3つのステップでテストシングルノードKafkaクラスターをセットアップしましょう。

  • KafkaとZookeeperのダウンロード
  • Zookeeperサービスの開始
  • カフカサービスの開始

まず、Apacheサイトから正しいKafkaバージョンをダウンロードする必要があります。 ダウンロードが完了したら、ダウンロードしたアーカイブを抽出する必要があります。

$ tar xvf kafka_2.13-2.6.0.tgz

KafkaはApacheZookeeperを使用してクラスターメタデータを管理しているため、実行中のZookeeperクラスターが必要です。

テストの目的で、binディレクトリのzookeeper-server-start.shスクリプトを使用して単一ノードのZookeeperインスタンスを実行できます。

$ cd kafka_2.13-2.6.0 # extracted directory
$ ./bin/zookeeper-server-start.sh config/zookeeper.properties

これにより、ポート2181でリッスンしているZookeeperサービスが開始されます。 その後、別のスクリプトを使用してKafkaサーバーを実行できます。

$ ./bin/kafka-server-start.sh config/server.properties

しばらくすると、Kafkaブローカーが開始されます。 この単純なクラスターにいくつかのトピックを追加しましょう。

$ bin/kafka-topics.sh --create --topic users.registrations --replication-factor 1 \
  --partitions 2  --zookeeper localhost:2181
$ bin/kafka-topics.sh --create --topic users.verfications --replication-factor 1 \
  --partitions 2  --zookeeper localhost:2181

すべての準備が整ったので、Kafkaトピックを一覧表示する方法を見てみましょう。

3. トピックの一覧表示

クラスタ内のすべてのKafkaトピックを一覧表示するには、ダウンロードしたKafkaディストリビューションにバンドルされている bin /kafka-topics.shシェルスクリプトを使用できます。 必要なのは、クラスターに関する情報とともに–listオプションを渡すことだけです。 たとえば、Zookeeperサービスアドレスを渡すことができます。

$ bin/kafka-topics.sh --list --zookeeper localhost:2181
users.registrations
users.verfications

上に示したように、 –list オプションは、kafka-topics.shシェルスクリプトにすべてのトピックを一覧表示するように指示します。 この場合、ユーザー関連のイベントを保存するための2つのトピックがあります。 クラスタにトピックがない場合、コマンドは結果なしでサイレントに戻ります。

また、 Kafkaクラスターと通信するには、–zookeeperオプションを使用してZookeeperサービスのURLを渡す必要があります。

–bootstrap-serverオプションを使用して、Kafkaクラスターアドレスを直接渡すことも可能です。

$ ./bin/kafka-topics.sh --bootstrap-server=localhost:9092 --list
users.registrations
users.verfications

シングルインスタンスのKafkaクラスターは9092ポートをリッスンするため、ブートストラップサーバーとして「localhost:9092」を指定しました。 簡単に言えば、ブートストラップサーバーはKafkaブローカーです。

Kafkaクラスターとの通信に必要な情報を渡さないと、 kafka-topics.shシェルスクリプトで次のエラーが発生します。

$ ./bin/kafka-topics.sh --list
Exception in thread "main" java.lang.IllegalArgumentException: Only one of --bootstrap-server or --zookeeper must be specified
        at kafka.admin.TopicCommand$TopicCommandOptions.checkArgs(TopicCommand.scala:721)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:52)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

上に示したように、シェルスクリプトでは、 –bootstrap-serverまたは–zookeeperオプションのいずれかを渡す必要があります。

4. トピックの詳細

トピックのリストが見つかったら、1つの特定のトピックの詳細を確認できます。 そのためには、 「–describe –topic」を使用できます 」オプションの組み合わせ

$ ./bin/kafka-topics.sh --bootstrap-server=localhost:9092 --describe --topic users.registrations
Topic: users.registrations      PartitionCount: 2       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: users.registrations      Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: users.registrations      Partition: 1    Leader: 0       Replicas: 0     Isr: 0

これらの詳細には、パーティションやレプリカの数など、指定されたトピックに関する情報が含まれます。 他のコマンドと同様に、クラスター情報またはZookeeperアドレスを渡す必要があります。 そうしないと、クラスターと通信できません。

5. 結論

この短い記事では、Kafkaクラスター内のすべてのトピックを一覧表示する方法を学びました。 その過程で、単純な単一ノードのKafkaクラスターをセットアップする方法を見てきました。

現在、ApacheKafkaはZookeeperを使用してクラスターメタデータを管理しています。 ただし、これは KIP-500 の一部としてまもなく変更されます。これは、Kafkaが独自のメタデータクォーラムを持つためです。