Node.js: Apache Kafka® のサンプルコード

このチュートリアルでは、Apache Kafka® クラスターにメッセージを生成し、このクラスターからメッセージを消費する Node.js クライアントアプリケーションを実行します。

チュートリアルの実行後に、提供された ソースコード をリファレンスとして使用して、独自の Kafka クライアントアプリケーションを開発します。

前提条件

クライアント

Kafka クラスター

このチュートリアルは、Confluent Cloud を使用して取り組むのが最も簡単です。そうすればローカル Kafka クラスターを実行する必要はありません。Confluent Cloud にサインアップするときは、プロモーションコード C50INTEG を適用すると、$50 相当を無料で使用できます(詳細)。Console から LEARN をクリックしてクラスターをプロビジョニングし、Clients をクリックして、クライアントアプリケーションに対して設定するクラスター固有の構成と認証情報を取得します。サポートされている CLIREST API、またはコミュニティでサポートされている Confluent Cloud 向け ccloud-stack ユーティリティ を使用してもかまいません。

Confluent Cloud の使用を希望しない場合は、ローカルホスト や他のリモートサーバーで実行されている Kafka クラスターでこのチュートリアルに取り組むこともできます。

セットアップ

  1. confluentinc/examples GitHub リポジトリのクローンを作成し、6.2.4-post ブランチをチェックアウトします。

    git clone https://github.com/confluentinc/examples
    cd examples
    git checkout 6.2.4-post
    
  2. Node.js のサンプルのディレクトリに変更します。

    cd clients/cloud/nodejs/
    
  3. Kafka クラスターに接続するための構成パラメーターを含むローカルファイル($HOME/.confluent/librdkafka.config など)を作成します。以下のテンプレートのいずれかをベースとして、クラスターへの接続情報でこのファイルをカスタマイズします。{{ BROKER_ENDPOINT }}{{CLUSTER_API_KEY }}、および {{ CLUSTER_API_SECRET }} に値を代入します(この値を手作業で見つける方法については、「Configure Confluent Cloud Clients」を参照してください。 または、Confluent Cloud 向け ccloud-stack ユーティリティ を使用して値を自動作成します)。

    • Confluent Cloud のテンプレート構成ファイル

      # Kafka
      bootstrap.servers={{ BROKER_ENDPOINT }}
      security.protocol=SASL_SSL
      sasl.mechanisms=PLAIN
      sasl.username={{ CLUSTER_API_KEY }}
      sasl.password={{ CLUSTER_API_SECRET }}
      
    • ローカルホストのテンプレート構成ファイル

      # Kafka
      bootstrap.servers=localhost:9092
      

基本プロデューサーおよびコンシューマー

このサンプルでは、プロデューサーアプリケーションが Kafka クラスターのトピックに Kafka データを書き込みます。Kafka クラスターにトピックがまだ存在しない場合、プロデューサーアプリケーションは Kafka Admin Client API を使用してトピックを作成します。Kafka に書き込まれる各レコードには、ユーザー名(alice など)を表すキーと、json フォーマットのカウント値({"count": 0} など)があります。コンシューマーアプリケーションは、同じ Kafka トピックを読み取り、各レコードの処理中にカウントのローリング合計を保持します。

レコードの生成

  1. npm の依存関係をインストールします。

    npm install
    
  2. プロデューサーを実行して、次の引数を渡します。

    • Kafka クラスターに接続するための構成パラメーターを含むローカルファイル
    • トピック名
    node producer.js -f $HOME/.confluent/librdkafka.config -t test1
    
  3. プロデューサーがすべてのメッセージを送信したことを確認します。次のように表示されます。

    Created topic test1
    Producing record alice    {"count":0}
    Producing record alice    {"count":1}
    Producing record alice    {"count":2}
    Producing record alice    {"count":3}
    Producing record alice    {"count":4}
    Producing record alice    {"count":5}
    Producing record alice    {"count":6}
    Producing record alice    {"count":7}
    Producing record alice    {"count":8}
    Producing record alice    {"count":9}
    Successfully produced record to topic "test1" partition 0 {"count":0}
    Successfully produced record to topic "test1" partition 0 {"count":1}
    Successfully produced record to topic "test1" partition 0 {"count":2}
    Successfully produced record to topic "test1" partition 0 {"count":3}
    Successfully produced record to topic "test1" partition 0 {"count":4}
    Successfully produced record to topic "test1" partition 0 {"count":5}
    Successfully produced record to topic "test1" partition 0 {"count":6}
    Successfully produced record to topic "test1" partition 0 {"count":7}
    Successfully produced record to topic "test1" partition 0 {"count":8}
    Successfully produced record to topic "test1" partition 0 {"count":9}
    
  4. プロデューサーコード を表示します。

レコードの消費

  1. コンシューマーを実行して、次の引数を渡します。

    • Kafka クラスターに接続するための構成パラメーターを含むローカルファイル
    • 前の手順で使用したトピック名
    node consumer.js -f $HOME/.confluent/librdkafka.config -t test1
    
  2. コンシューマーがすべてのメッセージを受信したことを確認します。

    Consuming messages from test1
    Consumed record with key alice and value {"count":0} of partition 0 @ offset 0. Updated total count to 1
    Consumed record with key alice and value {"count":1} of partition 0 @ offset 1. Updated total count to 2
    Consumed record with key alice and value {"count":2} of partition 0 @ offset 2. Updated total count to 3
    Consumed record with key alice and value {"count":3} of partition 0 @ offset 3. Updated total count to 4
    Consumed record with key alice and value {"count":4} of partition 0 @ offset 4. Updated total count to 5
    Consumed record with key alice and value {"count":5} of partition 0 @ offset 5. Updated total count to 6
    Consumed record with key alice and value {"count":6} of partition 0 @ offset 6. Updated total count to 7
    Consumed record with key alice and value {"count":7} of partition 0 @ offset 7. Updated total count to 8
    Consumed record with key alice and value {"count":8} of partition 0 @ offset 8. Updated total count to 9
    Consumed record with key alice and value {"count":9} of partition 0 @ offset 9. Updated total count to 10
    
  3. View the consumer code.

おすすめのリソース

  • ブログ記事: 「Getting Started with KafkaJS」。ここでは、Apache Kafka® 用に代わりの Node.js クライアントを使用しています。