Managed Service for Apache Kafka クラスタの合成データを生成する

Google Cloud コンソールを使用して Google Cloud Managed Service for Apache Kafka クラスタの合成テストデータを生成する方法を学習します。

このガイドでは、Dataflow Streaming Data Generator テンプレートを使用して、サンプル ゲームのテレメトリー データを Managed Service for Apache Kafka トピックに自動的にパブリッシュします。ストリーミング データ生成ツールは、指定されたスキーマに基づいて、構成可能なレートで合成テストレコードを生成する Dataflow テンプレートです。合成データを生成すると、ローカル Kafka クライアントをインストールしたり、カスタム プロデューサー コードを記述したりすることなく、クラスタ アクティビティのモニタリング、負荷処理のテスト、モニタリング指標の検証を行うことができます。テンプレートの詳細については、Dataflow ストリーミング データ ジェネレータ テンプレートをご覧ください。

始める前に

このチュートリアルを開始する前に、新しい Managed Service for Apache Kafka クラスタを作成します。すでにクラスタがある場合は、この手順をスキップできます。クラスタの作成に必要なロールと権限については、クラスタを作成して表示するをご覧ください。そのガイドに沿って操作する場合は、このガイドに戻る前に、クラスタを作成するセクションのみを完了してください。

クラスタを作成する方法

コンソール

  1. [Managed Service for Apache Kafka] > [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. [ 作成] をクリックします。
  3. [クラスタ名] フィールドに、クラスタの名前を入力します。
  4. [リージョン] リストで、クラスタのロケーションを選択します。
  5. [ネットワーク構成] で、クラスタにアクセス可能なサブネットを構成します。
    1. [プロジェクト] で、該当するプロジェクトを選択します。
    2. [ネットワーク] で、VPC ネットワークを選択します。
    3. [サブネット] でサブネットを選択します。
    4. [完了] をクリックします。
  6. [作成] をクリックします。

[作成] をクリックすると、クラスタの状態が Creating になります。クラスタの準備が整うと、状態は Active になります。

gcloud

Kafka クラスタを作成するには、managed-kafka clusters create コマンドを実行します。

gcloud managed-kafka clusters create KAFKA_CLUSTER \
--location=REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
--async

次のように置き換えます。

  • KAFKA_CLUSTER: Kafka クラスタの名前
  • REGION: クラスタのロケーション
  • PROJECT_ID: プロジェクト ID
  • SUBNET_NAME: クラスタを作成するサブネット(例: default

サポートされているロケーションについては、 Managed Service for Apache Kafka のロケーションをご覧ください。

このコマンドは非同期で実行され、オペレーション ID を返します。

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

作成オペレーションの進行状況を追跡するには、gcloud managed-kafka operations describe コマンドを使用します。

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

クラスタの準備ができると、このコマンドの出力に state: ACTIVE エントリが含まれます。詳細については、 クラスタ作成オペレーションをモニタリングするをご覧ください。

必要なロール

クラスタの合成データを生成するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、クラスタの合成データを生成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

クラスタの合成データを生成するには、次の権限が必要です。

  • dataflow.jobs.create
  • dataflow.jobs.get
  • managedkafka.clusters.get
  • managedkafka.topics.get
  • managedkafka.topics.create
  • managedkafka.topics.publish
  • resourcemanager.projects.setIamPolicy

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Compute Engine のデフォルト サービス アカウントに Dataflow ジョブを実行するために必要な権限を付与するには、プロジェクトに対する次の IAM ロールを Compute Engine のデフォルト サービス アカウントに付与するよう管理者に依頼します。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

管理者は、カスタムロールや他の事前定義ロールを使用して、Compute Engine のデフォルトのサービス エージェントに必要な権限を付与することもできます。

IAM ロールを付与する権限がある場合、Google Cloud コンソールには、合成データ生成プロセス中に必要なロールを付与するよう求めるメッセージが表示されます。ロールを付与する権限がない場合、コンソールに、必要な権限を管理者に付与するようリクエストするメッセージが表示されます。

合成データを生成する

Kafka トピックの合成データを生成する Dataflow ジョブを作成して起動するには:

  1. Google Cloud コンソールで、[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. クラスタの名前(test-cluster など)をクリックします。

  3. [Sources] タブを選択します。

  4. [ソース] ページの [合成データを生成する] カードで、[Dataflow ジョブを作成する] をクリックします。[Produce Data] ペインが開きます。

  5. [データの生成] ペインで、[Kafka トピック] プルダウン リストからトピック(test-topic など)を選択します。トピックがない場合は、次の手順で作成します。

    1. [Kafka トピック] プルダウン リストで、[トピックを作成] をクリックします。[トピックを作成] ペインが開きます。
    2. [トピック名] フィールドに「test-topic」と入力します。
    3. [パーティション数](3)と [レプリケーション係数](3)のデフォルト値はそのままにします。
    4. [作成] をクリックします。
  6. [出力レート(QPS)] フィールドに、ジェネレータで生成する秒間クエリ数(100 など)を入力します。これにより、クラスタがさまざまな負荷をどのように処理するかをテストできます。

  7. Dataflow サービス アカウントに必要な権限がないという警告が表示された場合は、[付与] をクリックして次のロールを割り当てます。

    • Dataflow ワーカーroles/dataflow.worker
    • マネージド Kafka クライアントroles/managedkafka.client
  8. [データを生成] ペインで、[作成] をクリックして Dataflow ジョブを起動します。

    Dataflow ジョブが作成されたことを示す通知が表示されます。

  9. 通知で [ジョブを表示] をクリックして [Dataflow ジョブの詳細] ページを開き、ジョブグラフ、ステータス、実行指標を確認します。

クラスタ指標を表示する

Dataflow ジョブが開始されたら、クラスタに流れる合成データを観察します。

  1. test-cluster の [クラスタの詳細] ページで、[モニタリング] タブをクリックします。

  2. [バイトレート] グラフと [プロダクト スループット別の上位 5 つのトピック] グラフを確認して、データがトピックにアクティブに生成されていることを確認します。

メッセージを表示する

次のいずれかの方法で、合成メッセージがトピックにパブリッシュされていることを確認します。

Kafka コマンドライン ツールで表示する

クライアント VM で Kafka CLI ツールを使用してクラスタからメッセージを直接使用するには:

  1. SSH を使用してクライアント VM に接続します。クライアント VM を設定していない場合は、クライアント VM を作成するをご覧ください。

  2. Google Cloud コンソールからクラスタのブートストラップ サーバー アドレスを取得し、クライアント VM の環境変数として設定します。

    1. Google Cloud コンソールで、[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。

      [クラスタ] に移動

    2. クラスタの名前(test-cluster など)をクリックします。

    3. [クラスタの詳細] ページで、[構成] をクリックします。

    4. [ブートストラップ URL] の下にリストされている値をコピーします。

  3. クライアント VM で、環境変数を設定します。

    ```sh
    export BOOTSTRAP="BOOTSTRAP_URL"
    ```
    

    BOOTSTRAP_URL は、コピーしたブートストラップ アドレスに置き換えます。

  4. kafka-console-consumer.sh コマンドを実行してメッセージを読み取ります。

    kafka-console-consumer.sh \
     --bootstrap-server $BOOTSTRAP \
     --topic TOPIC_ID \
     --from-beginning \
     --consumer.config client.properties
    

    TOPIC_ID は、test-topic などのトピック名に置き換えます。

    コンソールに、ストリーミングされた合成ゲームデータ レコードが使用されるたびに表示されます。

  5. Ctrl+C キーを押して、メッセージの消費を停止します。

BigQuery で表示

Kafka トピックから BigQuery にデータをストリーミングしてレコードを表示するには:

  1. 合成データは未加工の JSON であるため、コネクタを作成する前に、BigQuery で宛先テーブルを手動で作成する必要があります。テーブルの作成方法については、スキーマ定義を含む空のテーブルを作成するをご覧ください。次のスキーマを使用して、データセットに test-topic という名前のテーブルを作成します。

    [
      {"name": "eventId", "type": "STRING"},
      {"name": "eventTimestamp", "type": "INTEGER"},
      {"name": "ipv4", "type": "STRING"},
      {"name": "ipv6", "type": "STRING"},
      {"name": "country", "type": "STRING"},
      {"name": "username", "type": "STRING"},
      {"name": "quest", "type": "STRING"},
      {"name": "score", "type": "INTEGER"},
      {"name": "completed", "type": "BOOLEAN"}
    ]
    
  2. Connect クラスタに BigQuery Sink コネクタを作成して、トピックから BigQuery テーブルにメッセージをストリーミングします。コネクタを構成するときは、次のサンプル プロパティを使用します。PROJECT_ID はプロジェクト ID に置き換えます。

    bigQueryPartitionDecorator=false
    connector.class=com.wepay.kafka.connect.bigquery.BigQuerySinkConnector
    defaultDataset=test_dataset
    key.converter=org.apache.kafka.connect.storage.StringConverter
    project=PROJECT_ID
    tasks.max=3
    topics=test-topic
    value.converter=org.apache.kafka.connect.json.JsonConverter
    value.converter.schemas.enable=false
    
  3. コネクタがデータのストリーミングを開始したら、 Google Cloud コンソールの [BigQuery] ページに移動します。

    BigQuery に移動

  4. [エクスプローラ] パネルでプロジェクト ID を開き、データセット test_dataset を選択します。

  5. テーブル名 test-topic をクリックします。

  6. [プレビュー] タブをクリックして、ストリーミングされた合成レコードを表示します。または、[クエリを新規作成] をクリックして、次の SQL クエリを実行します。

    SELECT * FROM `PROJECT_ID.DATASET_ID.TABLE_ID` LIMIT 10;
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID
    • DATASET_ID: データセット ID(test_dataset など)
    • TABLE_ID: テーブル ID(test-topic など)
  7. [実行] をクリックして、[クエリ結果] ペインにサンプルレコードを表示します。

    注: SELECT COUNT(*) クエリを使用してレコードを確認しないでください。コネクタは BigQuery Streaming API を使用するため、データは最初にストリーミング バッファに書き込まれます。SELECT * を使用するとデータはすぐに表示されますが、行数の更新には数分かかることがあります。

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

  1. Google Cloud コンソールで、[Dataflow ジョブ] ページに移動します。

    Dataflow ジョブに移動

  2. トピック用に作成されたジョブの名前をクリックします。

  3. [停止] をクリックします。

  4. [キャンセル] を選択してから [ジョブの停止] をクリックします。

  5. 省略可: Kafka クラスタが不要になった場合は、[Managed Service for Apache Kafka クラスタ] ページに移動し、test-cluster を選択して [削除] をクリックします。

次のステップ