Kafka のイベントプロデューサーとの協業

Code Engine Kafka のサブスクリプションは、 Kafka インスタンスに新しいメッセージが表示されるのを監視します。 一連のトピックのサブスクリプションを作成すると、アプリケーションまたはジョブは、いずれかのトピックに表示される新規メッセージごとに別個のイベントを受け取ります。 1つのプロジェクトにつき、 Kafka のサブスクリプションは最大100件まで作成できます。

どの Kafka インスタンスでも使用できますが、このトピックの例では IBM® Event Streams for IBM Cloud® サービスを使用しています。 Event Streams は、 Kafka イベント向けの IBM イベントストリーミングサービスです。 このサービスの詳細については、 Event Streams のドキュメントを 参照してください。

Kafka イベントプロデューサーの設定

Kafka のメッセージプロデューサーを設定して、 Code Engine の Kafka イベントサブスクリプションにメッセージを送信するようにすることができます。 Code Engine の Kafka イベントサブスクリプションを使用して、 Kafka メッセージを受信した際に、アプリケーションやジョブをトリガーします。

開始するには、イベント・ストリーミング・サービス用の Event Streams サービス・インスタンスを作成 します。 コンソールまたは CLI を使用できますが、以下のステップでは、CLI を使用して Event Streams イベント・プロデューサーをセットアップする方法について説明します。

Event Streams CLI 環境のセットアップ

  1. IBM Cloud CLI をダウンロードしてインストールします。 IBM Cloud CLI にログインします。

    ibmcloud login
    
  2. Code Engine CLI をダウンロードしてインストールします。

    ibmcloud plugin install code-engine -f
    
  3. Event Streams サービスを使用して Kafka インスタンスを作成するには、 Event Streams CLI をダウンロードしてインストールします。

    ibmcloud plugin install event-streams -f
    
  4. IBM Cloud アカウントにログインし、リソース・グループをターゲットにします。 以下のコマンドを実行して、リソース・グループをターゲットに設定します。 リソースグループの一覧を取得するには、 ibmcloud resource groups コマンドを実行してください。

    ibmcloud target -g <resource_group>
    

Kafka インスタンスの設定

  1. Event Streamsのサービス・インスタンスを作成します。 Event Streams CLI サービスの名前は messagehub です。 この例では、 myeventstream という名前の Event Streams サービス・インスタンスを作成します。

    ibmcloud resource service-instance-create myeventstream messagehub lite us-south
    
  2. サービス・インスタンスに資格情報を提供するためのサービス・キーを作成します。

    ibmcloud resource service-key-create myeventstream-key Manager --instance-name myeventstream
    

    出力例

    Creating service key of service instance myeventstream under account <user_account>...
    OK
    Service key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd was created.
    Name:          myeventstream-key
    ID:            crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd
    Created At:    Mon Mar 21 18:36:09 UTC 2022
    State:         active
    Credentials:
                api_key:                  abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh
                apikey:                   abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh
                iam_apikey_description:   Auto-generated for key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd
                iam_apikey_name:          myeventstream-key
                iam_role_crn:             crn:v1:bluemix:public:iam::::serviceRole:Manager
                iam_serviceid_crn:        crn:v1:bluemix:public:iam-identity::a/e43abfcbd191404cb17ef650e9681dd3::serviceid:ServiceId-3e99caa5-b174-4f04-9845-5c5d783b8bc7
                instance_id:              c0736069-3f4a-438a-b614-6846877d692d
                kafka_admin_url:          https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com
                kafka_brokers_sasl:       [broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093]
                kafka_http_url:           https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com
                password:                 abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh
                user:                     token
    

    サービス・キーの userpassword、および kafka-brokers_sasl の値をメモします。 この情報は、 Code Engine Kafka サブスクリプションをセットアップするときに必要になります。 passwordapikey の値は、 Event Streams サービス・インスタンスのサービス・キーで同じです。 ibmcloud resource service-key myeventstream-key コマンドを使用して、サービス・キー情報を取得することもできます。

  3. Event Streams サービス・インスタンスに関連する Event Streams プラグインを初期化します。

    ibmcloud es init --instance-name myeventstream
    
  4. 「 Event Streams 」トピックを作成します。

    ibmcloud es topic-create kafka-topic1
    

Kafka メッセージを生成するための Code Engine サンプル・アプリのセットアップ

このシナリオでは、 Code Engine アプリケーションを使用して、 Kafka メッセージのイベント・プロデューサーとして機能します。 このアプリケーションの目的は、 Event Streams インスタンスに接続し、 Kafka メッセージを送信することです。 このアプリケーションは、 Code Engine Kafka 送信側サンプル・アプリケーション を使用して Kafka メッセージを送信します。 このサンプル送信側イメージには、 BROKERS 環境変数と、 password 資格情報を含むシークレットが必要です。 このアプリケーションは、コンソールまたはCLIから作成できます。

Event Streams 宛てに Kafka メッセージを送信する際は、必ず「 Content-Type 」ヘッダーを指定してください。 このヘッダーを指定して、コンシューマーが予期されるコンテンツ・タイプ (例えば、 application/json) のメッセージを受信できるようにします。

Kafka サンプルで必要な資格情報を使用したシークレットの作成

Kafka メッセージを送信する Code Engine アプリケーションを作成する前に、必要な資格情報を含む Code Engine 秘密を作成します。

開始前に

  • 使用する Code Engine プロジェクトを決定し、このプロジェクトが選択されていることを確認します。 プロジェクトの作成と操作 を参照してください。

このシナリオを簡略化するため、 Kafka の送信者サンプルアプリと、 Kafka 受信者サンプルを使用する Kafka のイベントサブスクリプションの両方に必要な認証情報を格納する「 kafka-subscription-secret 」という1つのシークレットを作成します。 これらの認証情報は、サンプルアプリ「 Kafka 」の送信アプリおよび「 Code Engine 」の「 Kafka 」イベントサブスクリプションが、「 Event Streams 」のサービスインスタンスと通信するために必要です。 Kafka の送信者アプリやイベントサブスクリプションを作成する前に、このシークレットを作成する必要はありませんが、作成しておくと必要な手順が簡略化されます。

コンソールからの Kafka サンプルに必要な資格情報を使用したシークレットの作成

コンソールから kafka-subscription-secret シークレットを作成するには、 「シークレットと構成マップ (Secrets and configmaps)」 に移動し、 「作成」 をクリックして、作成するシークレットを選択します。 詳しくは、 コンソールからのシークレットの作成 を参照してください。

  • Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている user の値を使用して、 username キーを指定します。 Event Streams サービス・インスタンスの場合、この値は token です。 このキーは、 Code Engine Kafka イベント・サブスクリプションと Kafka メッセージ・ブローカーとの間の認証に必要です。
  • Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている apikey の値を使用して、 password キーを指定します。 このキーは、送信側サンプルで、 Code Engine Kafka イベント・サブスクリプションと Kafka メッセージ・ブローカーとの間の通信を有効にするために必要です。
CLI での Kafka サンプルに必要な資格情報を使用したシークレットの作成

CLI で kafka-subscription-secret シークレットを作成するには、 password および username のリテラル環境変数を追加します。 詳しくは、 CLI でのシークレットの作成 を参照してください。

  • Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている user の値を使用して、 username キーを指定します。 Event Streams サービス・インスタンスの場合、この値は token です。 このキーは、 Code Engine Kafka イベント・サブスクリプションと Kafka メッセージ・ブローカーとの間の認証に必要です。

  • Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている apikey の値を使用して、 password キーを指定します。 このキーは、送信側サンプルで、 Code Engine Kafka イベント・サブスクリプションと Kafka メッセージ・ブローカーとの間の通信を有効にするために必要です。

    ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=<value_of_apikey> --from-literal username=<value_of_user>
    

    以下に例を示します。

    ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh --from-literal username=token
    

イベントを送信するための Code Engine アプリの作成

Event Streams インスタンスに接続し、 Kafka メッセージを Kafka メッセージの受信者( Kafka コンシューマー)に送信するための Code Engine アプリを作成します。

コンソールからイベントを送信するための Code Engine アプリの作成

コンソールから「 kafka-sender-app 」アプリケーションを作成するには、以下の手順を実行してください。

  1. 以下の情報を使用して、 kafka-sender-app という Code Engine アプリケーション を作成します。

    1. このアプリの icr.io/codeengine/kafka-sender コンテナー・イメージを参照します。 このイメージは sender.go からビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプル送信側アプリには、 passwordBROKERS の値が必要です。
    2. 「環境変数 (オプション)」 セクションで、以下の環境変数を追加します。
      1. リテラル環境変数 BROKERS を追加します。 このキーの値には、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている 1 つ以上のブローカー・ホストを指定します。
      2. 別の環境変数を 「完全なシークレットの参照」( kafka-subscription-secret) に追加します。 このシークレットには、 password の資格情報が含まれています。
    3. (オプション) 「リソース」&「スケーリング」 セクションで、インスタンスの最小数に 1 を指定して、アプリが常に実行中のインスタンスを持ち、ゼロにスケーリングされないようにします。 ログを参照するときには、実行中のインスタンスが常に存在するようにアプリを構成すると役に立ちます。 実稼働環境で実行している場合は、アプリの実行インスタンスを保持するコスト、または Code Engine をゼロに自動スケーリングするかどうかを考慮してください。 デフォルトでは、使用されていない場合、アプリはゼロにスケーリングされます。
    4. 「作成」 をクリックして、アプリを作成およびデプロイします。
  2. このアプリケーションが ready 状況であることを確認します。

CLI を使用してイベントを送信するための Code Engine アプリの作成

CLI を使用して kafka-sender-app アプリケーションを作成するには、以下のコマンドを使用します。

  1. 以下の情報を使用して、 kafka-sender-app という Code Engine アプリケーション を作成します。

    • icr.io/codeengine/kafka-sender コンテナー・イメージを参照するには、 --image オプションを指定します。 このイメージは sender.go からビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプル送信側アプリケーションには、 kafka-subscription-secret に保管されている password 資格情報と、 BROKERS 環境変数が必要です。
    • password 資格情報を含む完全なシークレット kafka-subscription-secret を参照するには、 --env-from-secret オプションを指定します。
    • --env オプションを指定してリテラル環境変数 BROKERS を追加し、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされているブローカー・ホストの 1 つの名前を指定します。 ただし、複数のブローカー・ホスト名を指定する場合は、 --env BROKERS-broker1,broker2,broker3 の形式を使用します。
    • (オプション) --min-scale=1 オプションを指定すると、アプリは常に実行中のインスタンスを保持し、スケールがゼロになることはありません。 ログを参照するときには、実行中のインスタンスが常に存在するようにアプリを構成すると役に立ちます。 実稼働環境で実行している場合は、アプリの実行インスタンスを保持するコスト、または Code Engine をゼロに自動スケーリングするかどうかを考慮してください。 デフォルトでは、使用されていない場合、アプリはゼロにスケーリングされます。
    ibmcloud ce app create --name kafka-sender-app --image icr.io/codeengine/kafka-sender --env-from-secret kafka-subscription-secret --env BROKERS=broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --min-scale 1
    

アプリの Kafka イベントを受信するための Code Engine のセットアップ

Code Engine で Kafka のイベントを処理するには、コンソールまたはCLIを使用して、 Code Engine Kafka のイベントサブスクリプションを設定し、 Kafka のイベントブローカーに接続して、 Kafka のイベントをリッスンするようにします。 また、 Kafka イベントの受信側として機能する Code Engine アプリ(またはジョブ)を設定してください。 Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。

Code Engine Kafka イベントサブスクリプションは、あなたの Kafka メッセージブローカーに接続し、 Kafka 受信メッセージごとに HTTP Post リクエストをレシーバーアプリケーションに送信します。 詳しくは、イベントの HTTP ヘッダーおよび本文の情報を参照してください。

コンソールからアプリの「 Kafka 」イベントを購読する

コンソールを使用して、 Kafka のイベントサブスクリプションを設定し、イベントが Code Engine アプリケーションに送信されるようにすることができます。

コンソールから Kafka イベントを受信するための Code Engine アプリの作成

  1. Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine アプリケーションを作成します。 例えば、icr.io/codeengine/kafka-receiverイメージを使用するkafka-receiver-appというアプリケーションを作成します。 このイメージは receiver.go からビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプルでは、環境変数は必要ありません。
  2. このアプリをデプロイした後、アプリの状況が ready であることを確認します。

コンソールを使用する場合、Kafka イベントを受信するために使用するアプリやジョブは、Kafka イベントのサブスクリプションを作成する前に存在している必要はありません。 ただし、イベント・サブスクリプションの作成時にアプリケーションまたはジョブが存在しない場合は、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。

コンソールからアプリの Code Engine Kafka イベント・サブスクリプションを作成する

Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。

開始前に

  • 使用する Code Engine プロジェクトを決定し、このプロジェクトが選択されていることを確認します。 プロジェクトの作成と操作 を参照してください。

コンソールからアプリケーションの「 Kafka 」イベントのサブスクリプションを作成するには、以下の手順を実行してください。

  1. Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。
  3. 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。
  4. 「イベント・サブスクリプションの作成 (Create an event subscription)」ページで、 Event Streams / Kafka タイルを選択してイベント・タイプを指定します。
  5. 「一般」 に、 Event Streams / Kafka サブスクリプションの名前を指定します。 **「次へ」**をクリックして、先に進みます。
  6. メッセージブローカーの詳細については、
    1. このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 Kafka メッセージブローカーのホストを指定します。 ブローカー・ホスト、トピック、およびアクセス資格情報に関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスのサービス資格情報の詳細を表示します。 例えば、 myeventstream-key サービス・インスタンスのメッセージ・ブローカー・ホストには、 "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" を指定します。 サービス・インスタンスのブローカーは、 Event Streams の Kafka_brokers_sasl フィールドで確認できます。
    2. 「構成」 をクリックして、メッセージ・ブローカーへのアクセスを構成します。 Code Engine から Kafka または Event Streams インスタンスに対して認証するには、メッセージ・ブローカー・アクセス・シークレットを指定する必要があります。
      • 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、 None を選択したりすることができます。
      • シークレットを作成するには、 「作成」 をクリックします。 シークレットの名前、および usernamepassword の値を指定します。 username および password の値は、 Kafka または Event Streams インスタンスのサービス資格情報の値と一致している必要があります。 例えば、 username の値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている user の値です。 password の値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている apikey の値です。
      • この例では、以前に作成した既存の kafka-subscription-secret シークレットを使用します。
    3. メッセージ待ち行列の既存のトピックの名前を指定してください。 例えば、kafka-topic1 です。 サービス・インスタンスの既存のトピックに関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスに移動し、 「トピック」 を表示します。
    4. (オプション) コンシューマー・グループを指定します。 Kafka メッセージのコンシューマーは、 コンシューマー・グループ にグループ化できます。 コンシューマー・グループを使用している場合、トピック構成は、コンシューマー・グループ内のコンシューマーへのメッセージ・フローを制御します。 コンシューマーがコンシューマー・グループに追加されたり、コンシューマー・グループから削除されたりするたびに、そのトピックからのメッセージ・フローが変更される可能性があります。 このアクションにより、既存のコンシューマーがそのトピックからメッセージを受信しなくなる可能性があります。
    5. **「次へ」**をクリックして、先に進みます。
  7. イベントコンシューマについては、イベントを受信するアプリケーションとして「 Code Engine 」を指定してください。 定義済みのアプリケーションおよびジョブのリストから選択することも、まだ作成されていないアプリ (またはジョブ) の名前を指定することもできます。 コンソールでイベント・サブスクリプションを作成するときに、アプリケーションまたはジョブが存在している必要はありません。 ただし、サブスクリプションが作成されると、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。 この例では、icr.io/codeengine/kafka-receiverイメージを参照するkafka-receiver-appアプリケーションを使用します。 アプリが存在しない場合は、 Kafka サブスクリプションの作成後に、アプリケーションの名前を指定し、 アプリケーションを作成 します。 アプリケーションの場合のみ、オプションでパスを指定できます。 デフォルトでは、イベントは、宛先アプリケーションのルート URL にルーティングされます。 パスを指定すると、アプリ内の別の宛先にイベントを送信できます。 例えば、サブスクリプション・パスに/eventsが指定されている場合、イベントはhttps://<base application URL>/eventsに送信されます。 **「次へ」**をクリックして、先に進みます。
  8. まとめとして、 Kafka のイベント購読設定を確認し、必要に応じて変更を行ってください。 準備ができたら、「 作成 」をクリックして、 Kafka のサブスクリプションを作成してください。

コンソールから受信側アプリへのイベントの送信

kafka-receiver-app アプリケーションを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、受信アプリケーションにメッセージイベントを送信してください。

  1. 受信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、イベントを確認します。

  2. (オプション) 送信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、送信されたイベントに関する情報を確認します。

  3. ロギングが開始されたら、 curlkafka-sender-app アプリケーションを呼び出し、 kafka-sender-app の public URL、トピック名、送信するメッセージ数を指定する。 このアプリケーションの公開 URL は、アプリケーションの Domain mappings タブから取得できます。 以下に例を示します。

    curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
    

値が単一ストリングとして扱われるように、必ず値を curl に引用符で囲んでください。

CLI を使用してアプリで「 Kafka 」イベントを購読する

CLI を使用して、 Kafka のイベントサブスクリプションを設定し、イベントが Code Engine アプリケーションに送信されるようにすることができます。

イベントは、HTTP POST 要求としてアプリケーションに送信されます。 Kafka のイベントに含まれる情報の詳細については、「 HTTP のイベントのヘッダーおよび本文情報 」を参照してください。 イベントが Code Engine ジョブに送信された場合、そのジョブはイベントを環境変数として受け取ります。 Kafka のサブスクリプションに関する環境変数の詳細については、「 イベントの環境変数 」を参照してください。

CLI で Kafka イベントを受信するための Code Engine アプリの作成

開始前に

  1. Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine アプリケーションを作成します。 例えば、icr.io/codeengine/kafka-receiverイメージを使用するkafka-receiver-app2というアプリケーションを作成します。 このイメージは receiver.go からビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプルでは、環境変数は必要ありません。 必要に応じて、 --min-scale=1 オプションを指定することで、アプリが常に実行中のインスタンスを保持し、スケールがゼロにならないようにすることができます。 ログを参照するときには、実行中のインスタンスが常に存在するようにアプリを構成すると役に立ちます。 実稼働環境で実行している場合は、アプリの実行インスタンスを保持するコスト、または Code Engine をゼロに自動スケーリングするかどうかを考慮してください。 デフォルトでは、使用されていない場合、アプリはゼロにスケーリングされます。

    ibmcloud ce app create -n kafka-receiver-app2 --image icr.io/codeengine/kafka-receiver --min-scale 1
    

    デフォルトでは、イベントは、宛先アプリケーションのルート URL にルーティングされます。 --path オプションを使用すると、アプリ内の異なる宛先にイベントを送信できます。 例えば、サブスクリプションで--path /eventが指定されている場合、イベントはhttps://<base application URL>/eventsに送信されます。

  2. このアプリをデプロイした後、 app get コマンドを実行して、アプリの状況が ready であることを確認します。

    ibmcloud ce app get -n kafka-receiver-app2
    

CLI を使用したアプリの Code Engine Kafka イベント・サブスクリプションの作成

CLI を使用して、 Kafka のイベントサブスクリプションを作成できます。これにより、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係が定義されます。

  1. ibmcloud ce sub kafka create コマンドを使用して、 Kafka イベント用の Code Engine Kafka イベント・サブスクリプションを作成します。 以前に作成した kafka-subscription-secret シークレットを使用して、メッセージ・ブローカーにアクセスします。 Kafka リソースのサービス資格情報に基づいてブローカー情報を指定します。 この例では、 ibmcloud resource service-key myeventstream-key コマンドの出力からブローカー情報を取得できます。 トピックのブローカーごとに --broker オプションを指定する必要があることに注意してください。 --destination オプションは、イベントを受信する Code Engine リソースを指定します。

    ibmcloud ce sub kafka create --name mykafkasubscription --destination kafka-receiver-app2 --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker  broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    
  2. Kafka イベントのサブスクリプションの詳細を表示します。

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    出力例

    Getting Kafka event subscription 'mykafkasubscription'...
    OK
    Name:          mykafkasubscription
    [...]
    Destination Type:                 app
    Destination:                      kafka-receiver-app2
    Brokers:
    broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    Consumer Group:                   knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340
    Topics:
    kafka-topic1
    Secret key reference (user):      kafka-subscription-secret.username
    Secret key reference (password):  kafka-subscription-secret.password
    Ready:                            true
    Conditions:
    Type                     OK    Age  Reason
    ConnectionEstablished    true  24s
    InitialOffsetsCommitted  true  24s
    Ready                    true  24s
    Scheduled                true  24s
    SinkProvided             true  24s
    Events:
    Type     Reason           Age  Source                  Messages
    Normal   FinalizerUpdate  26s  kafkasource-controller  Updated "mykafkasubscription" finalizers
    

CLI を使用した受信側アプリへのイベントの送信

kafka-receiver-app アプリケーションを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、受信アプリケーションにメッセージイベントを送信してください。

  1. を使用して、デスティネーション・アプリのパブリック URL、 kafka-sender-appibmcloud ce app get コマンドに --output url オプションを付けて、アプリの URL。

    ibmcloud ce app get -n kafka-sender-app --output url
    

    出力例

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Kafka イベント・プロデューサー・アプリ kafka-sender-app を実行して、宛先 Code Engine アプリケーションにイベントを送信します。 curl を指定して kafka-sender-app アプリケーションを呼び出し、トピックの値とメッセージ数を指定します。 アプリのパブリックxml-ph-0000@deepl.internalを見つけるには、 ibmcloud ce app get コマンドの出力を参照して、ご自身のアプリのパブリック URL を確認してください。 値が単一ストリングとして扱われるように、必ず値を curl に引用符で囲んでください。

    curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
    

    以下に例を示します。

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. ログ内のイベントを表示します。 有効なブローカー、トピック、およびアクセス・シークレットを使用して Kafka イベント・サブスクリプションが作成され、そのトピックに関するメッセージを生成する Kafka アプリケーション ( kafka-sender-app など) がある場合、 kafka-receiver-app などの Kafka メッセージを受信する宛先 Code Engine アプリケーションのログにイベントを表示できます。 Kafka 受信側アプリケーション (icr.io/codeengine/kafka-receiver) を使用する場合は、受信側アプリケーションのログで Event data を検索して、受信したメッセージを確認します。

    ibmcloud ce app logs -n kafka-receiver-app2
    

    出力例

    Getting logs for all instances of application 'kafka-receiver-app2'...
    OK
    kafka-receiver-app2-00001-deployment-66976f7988-9xttm/user-container:
    2022/03/31 22:19:45 Listening on port 8080
    2022/03/31 22:19:46 ----------
    2022/03/31 22:19:46 Path: /
    2022/03/31 22:19:46 Header: Accept-Encoding=[gzip]
    2022/03/31 22:19:46 Header: Ce-Id=[partition:0/offset:167]
    2022/03/31 22:19:46 Header: Ce-Source=[/apis/v1/namespaces/glxo4k7nj7d/kafkasources/mykafkasubscription#kafka-topic1]
    2022/03/31 22:19:46 Header: Ce-Specversion=[1.0]
    2022/03/31 22:19:46 Header: Ce-Subject=[partition:0#167]
    2022/03/31 22:19:46 Header: Ce-Time=[2022-03-31T22:19:36.499Z]
    2022/03/31 22:19:46 Header: Ce-Type=[dev.knative.kafka.event]
    2022/03/31 22:19:46 Header: Content-Length=[8]
    2022/03/31 22:19:46 Header: Forwarded=[for=172.30.208.213;proto=http, for=127.0.0.6]
    2022/03/31 22:19:46 Header: K-Proxy-Request=[activator]
    2022/03/31 22:19:46 Header: Traceparent=[00-b033708685c715a7c2384cdf05797785-65540b0937e9b0ce-00]
    2022/03/31 22:19:46 Header: User-Agent=[Go-http-client/1.1]
    2022/03/31 22:19:46 Header: X-B3-Parentspanid=[e1a785d7fdbead6c]
    2022/03/31 22:19:46 Header: X-B3-Sampled=[1]
    2022/03/31 22:19:46 Header: X-B3-Spanid=[abcde9901e6bf83f]
    2022/03/31 22:19:46 Header: X-B3-Traceid=[abcde490a426573772fa0bf60caf5ddb]
    2022/03/31 22:19:46 Header: X-Envoy-Attempt-Count=[1]
    2022/03/31 22:19:46 Header: X-Forwarded-For=[172.30.208.213, 127.0.0.6, 127.0.0.6]
    2022/03/31 22:19:46 Header: X-Forwarded-Proto=[http]
    2022/03/31 22:19:46 Header: X-Request-Id=[abcdeb4e-c5ac-abcd-abcd-60e6278abcde]
    2022/03/31 22:19:46 Event data: test1: 1
    

    なお、アプリのログ情報は1時間しか保存されませんのでご注意ください。 アプリ (またはジョブ) のログの表示について詳しくは、 ログの表示 を参照してください。

アプリに配信される Kafka イベントのヘッダーと本文の情報

アプリケーションに配信されるすべてのイベントは、HTTP POST メッセージとして受信されます。 イベントには特定の HTTP ヘッダーが含まれており、イベントの本文 (ビジネス・ロジック) を確認しなくても、イベントに関する重要な情報を素早く判別することができます。 詳細については、 CloudEvents 仕様 をご覧ください。

アプリのヘッダー

イベント用ヘッダーファイル
ヘッダー 説明
ce-id イベントの固有 ID。ただし、イベントが再生された場合は、同じ ID が割り当てられます。
ce-source このイベントがイベント・プロデューサーから生成された場所を示す URI 参照。 Kafka イベントの場合、このヘッダーの形式は /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME] です。
ce-specversion CloudEvents 仕様のバージョン。 この値は常に 1.0 です。
ce-subject Kafka パーティション番号とオフセット。 例えば、 partition:0#1 は区画 0 およびオフセット 1 を参照します。
ce-time イベントが生成された時刻。
ce-type イベントのタイプ。 Kafka イベントの場合、これは dev.knative.kafka.event です。

出力例

Ce-Id=[partition:0/offset:0]
Ce-Source=[/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription#kafka-topic1]
Ce-Specversion=[1.0]
Ce-Subject=[partition:0#0]
Ce-Time=[2021-09-27T16:39:01.36Z]
Ce-Type=[dev.knative.kafka.event]

HTTP アプリ本体

HTTP の本文には、 Kafka メッセージが含まれており、その形式は、サブスクリプションの作成または更新時に指定した形式となります。

ジョブの Kafka イベントを受信するための Code Engine のセットアップ

Code Engine で Kafka のイベントを処理するには、コンソールまたはCLIを使用して、 Code Engine Kafka のイベントサブスクリプションを設定し、 Kafka のイベントブローカーに接続して、 Kafka のイベントをリッスンするようにします。 また、 Kafka イベントの受信元として機能する Code Engine ジョブ(またはアプリ)を設定してください。 Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。

コンソールから Kafka のイベントを購読してジョブを実行する

コンソールを使用して、 Kafka のイベントサブスクリプションを設定し、イベントが Code Engine のジョブに送信されるようにすることができます。

ジョブのイベント・サブスクリプションを作成すると、トリガーされるイベントごとにジョブ実行が作成されます。 このジョブ実行には、ジョブに関連する環境変数があります。 Code Engine の Kafka イベントサブスクリプションは、 Kafka メッセージブローカーに接続し、ジョブに関連する環境変数を送信します。 Kafka によって送信される環境変数に関する詳細については、「 イベントの環境変数 」を参照してください。

コンソールから Kafka イベントを受信するための Code Engine ジョブの作成

  1. Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine ジョブ を作成します。 たとえば、「 kafka-receiver-job 」という名前のジョブを作成し、サンプルイメージ「 icr.io/codeengine/codeengine 」を使用するようにします。 この画像は、 IBM Cloud Code Engine GitHub リポジトリ用のサンプル から入手可能な「 codeengine.go 」を基に作成されています。 このサンプルでは、環境変数は必要ありません。
  2. このジョブを作成した後、そのジョブが ready 状況であることを確認します。

コンソールを使用する場合、Kafka イベントを受信するために使用するアプリやジョブは、Kafka イベントのサブスクリプションを作成する前に存在している必要はありません。 ただし、イベント・サブスクリプションの作成時にアプリケーションまたはジョブが存在しない場合は、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。

コンソールからジョブの Code Engine Kafka イベント・サブスクリプションを作成する

Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。

開始前に

  • 使用する Code Engine プロジェクトを決定し、このプロジェクトが選択されていることを確認します。 プロジェクトの作成と操作 を参照してください。

コンソールからアプリケーションの「 Kafka 」イベントのサブスクリプションを作成するには、以下の手順を実行してください。

  1. Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。
  3. 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。
  4. 「イベント・サブスクリプションの作成 (Create an event subscription)」ページで、 Event Streams / Kafka タイルを選択してイベント・タイプを指定します。
  5. 「一般」 に、 Event Streams / Kafka サブスクリプションの名前を指定します。 **「次へ」**をクリックして、先に進みます。
  6. メッセージブローカーの詳細については、
    1. このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 Kafka メッセージブローカーのホストを指定します。 ブローカー・ホスト、トピック、およびアクセス資格情報に関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスのサービス資格情報の詳細を表示します。 例えば、 myeventstream-key サービス・インスタンスのメッセージ・ブローカー・ホストには、 "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" を指定します。
    2. 「構成」 をクリックして、メッセージ・ブローカーへのアクセスを構成します。 Code Engine から Kafka または Event Streams インスタンスに対して認証するには、メッセージ・ブローカー・アクセス・シークレットを指定する必要があります。
      • 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、 None を選択したりすることができます。
      • シークレットを作成するには、 「作成」 をクリックします。 シークレットの名前、および usernamepassword の値を指定します。 username および password の値は、 Kafka または Event Streams インスタンスのサービス資格情報の値と一致している必要があります。 例えば、 username の値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている user の値です。 password の値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている apikey の値です。
      • この例では、以前に作成した既存の kafka-subscription-secret シークレットを使用します。
    3. メッセージ待ち行列の既存のトピックの名前を指定してください。 例えば、kafka-topic1 です。 サービス・インスタンスの既存のトピックに関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスに移動し、 「トピック」 を表示します。
    4. (オプション) コンシューマー・グループを指定します。 Kafka メッセージのコンシューマーは、 コンシューマー・グループ にグループ化できます。 コンシューマー・グループを使用している場合、トピック構成は、コンシューマー・グループ内のコンシューマーへのメッセージ・フローを制御します。 コンシューマーがコンシューマー・グループに追加されたり、コンシューマー・グループから削除されたりするたびに、そのトピックからのメッセージ・フローが変更される可能性があります。 このアクションにより、既存のコンシューマーがそのトピックからメッセージを受信しなくなる可能性があります。
    5. **「次へ」**をクリックして、先に進みます。
  7. イベントコンシューマについては、イベントを受信する「 Code Engine 」ジョブを指定してください。 定義済みのジョブおよびアプリのリストから選択することも、まだ作成されていないジョブ (またはアプリ) の名前を指定することもできます。 コンソールでイベント・サブスクリプションを作成するときに、アプリケーションまたはジョブが存在している必要はありません。 ただし、サブスクリプションが作成されると、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが作動可能状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、ジョブ (またはアプリ) を作成する必要があります。 この例では、コンポーネント・タイプとして job を選択し、イベントを受信するコンポーネントとして icr.io/codeengine/codeengine イメージを参照する kafka-receiver-job ジョブを使用します。 該当するジョブが存在しない場合は、ジョブの名前を指定し、 Kafka サブスクリプションの作成後に そのジョブを作成してください。 アプリケーションの場合のみ、オプションでパスを指定できます。 **「次へ」**をクリックして、先に進みます。
  8. まとめとして、 Kafka のイベント購読設定を確認し、必要に応じて変更を行ってください。 準備ができたら、「 作成 」をクリックして、 Kafka のサブスクリプションを作成してください。

コンソールから受信ジョブへのイベントの送信

kafka-receiver-job 」ジョブを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、メッセージイベントを受信側ジョブに送信してください。

  1. レシーバー・ジョブのロギングを開始して、 コンソールからジョブ・ログを表示 し、イベントを確認します。

  2. (オプション) 送信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、送信されたイベントに関する情報を確認します。

  3. ロギングが開始されたら、 curlkafka-sender-app アプリケーションを呼び出し、 kafka-sender-app の public URL、トピック名、送信するメッセージ数を指定する。 このアプリケーションの公開 URL は、アプリケーションの Domain mappings タブから取得できます。 以下に例を示します。

    curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
    

値が単一ストリングとして扱われるように、必ず値を curl に引用符で囲んでください。

有効なブローカー、トピック、およびアクセス・シークレットを使用して Kafka サブスクリプションが作成され、そのトピックに関するメッセージを生成する Kafka ジョブ ( kafka-sender-app など) がある場合、 kafka-receiver-job などの Kafka メッセージを受信する Code Engine ジョブのログでイベントを確認できます。 Kafka レシーバー・ジョブ (icr.io/codeengine/codeengine) を使用する場合は、レシーバー・ジョブのログで CE_DATA を検索して、受信したメッセージを確認します。

CLI を使用して、 Kafka のイベントを購読し、ジョブを実行する

CLI を使用して、 Kafka のイベントサブスクリプションを設定し、イベントが Code Engine のジョブに送信されるようにすることができます。

ジョブのイベント・サブスクリプションを作成すると、トリガーされるイベントごとにジョブ実行が作成されます。 このジョブ実行には、ジョブに関連する環境変数があります。 Code Engine の Kafka イベントサブスクリプションは、 Kafka メッセージブローカーに接続し、ジョブに関連する環境変数を送信します。 Kafka によって送信される環境変数に関する詳細については、「 イベントの環境変数 」を参照してください。

CLI で Kafka イベントを受信するための Code Engine ジョブの作成

開始前に

  1. Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine ジョブ を作成します。 例えば、icr.io/codeengine/codeengineイメージを使用するkafka-receiver-jobという名前のジョブを作成します。 この画像は、 IBM Cloud Code Engine GitHub リポジトリ用のサンプル から入手可能な「 codeengine.go 」を基に作成されています。

    ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine
    
  2. (オプション) このジョブを作成した後、 job get コマンドを実行して、このジョブに関する情報を表示します。

    ibmcloud ce job get -n kafka-receiver-job
    

CLI を使用したジョブの Code Engine Kafka イベント・サブスクリプションの作成

CLI を使用して、 Kafka のイベントサブスクリプションを作成できます。これにより、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係が定義されます。

  1. ibmcloud ce sub kafka create コマンドを使用して、 Kafka イベント用の Code Engine Kafka イベント・サブスクリプションを作成します。 以前に作成した kafka-subscription-secret シークレットを使用して、メッセージ・ブローカーにアクセスします。 Kafka リソースのサービス資格情報に基づいてブローカー情報を指定します。 この例では、 ibmcloud resource service-key myeventstream-key コマンドの出力からブローカー情報を取得できます。 トピックのブローカーごとに --broker オプションを指定する必要があることに注意してください。 --destination オプションは、イベントを受信する Code Engine リソースを指定します。 受信ジョブを処理する場合は、 --destination-type オプションも指定して、リソースがジョブであることを指定する必要があります。このオプションのデフォルトは app です。

    ibmcloud ce sub kafka create --name mykafkasubscription-withjob --destination-type job --destination kafka-receiver-job --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker  broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    
  2. Kafka イベントのサブスクリプションの詳細を表示します。

    ibmcloud ce sub kafka get -n mykafkasubscription-withjob
    

    出力例

    Getting Kafka event subscription 'mykafkasubscription-withjob'...
    OK
    Name:          mykafkasubscription-withjob
    [...]
    Destination Type:                 job
    Destination:                      kafka-receiver-job
    Brokers:
    broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    Consumer Group:                   knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340
    Topics:
    kafka-topic1
    Secret key reference (user):      kafka-subscription-secret.username
    Secret key reference (password):  kafka-subscription-secret.password
    Ready:                            true
    [...]
    

CLI を使用した受信ジョブへのイベントの送信

kafka-receiver-job アプリケーションを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、受信アプリケーションにメッセージイベントを送信してください。

  1. コマンドを使用して、インストール先アプリのパブリック URL、 kafka-sender-appibmcloud ce app get コマンドを使ってアプリの URL。

    ibmcloud ce app get -n kafka-sender-app --output url
    

    出力例

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Kafka イベント・プロデューサー・アプリ kafka-sender-app を実行して、イベントを宛先 Code Engine ジョブに送信します。 curl を指定して kafka-sender-app アプリケーションを呼び出し、トピックの値とメッセージ数を指定します。 コマンドの出力を使って ibmcloud ce app get コマンドの出力を使って、イベント生成アプリのパブリック URL。 値が単一ストリングとして扱われるように、必ず値を curl に引用符で囲んでください。 以下に例を示します。

    curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
    

    以下に例を示します。

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. ログ内のイベントを表示します。 有効なブローカー、トピック、およびアクセス・シークレットを使用して Kafka イベント・サブスクリプションが作成され、そのトピックに関するメッセージを生成する Kafka アプリケーション ( kafka-sender-app など) がある場合、 kafka-receiver-job などの Kafka メッセージを受信する宛先 Code Engine ジョブのログでイベントを確認できます。 curl を使用して送信されるメッセージごとに、同じ数のジョブ実行が Kafka イベントによってトリガーされます。 ジョブに送信されたイベントを表示するには、 ibmcloud ce jobrun logs コマンドを使用します。

    1. ibmcloud ce jobrun list コマンドを使用して、 kafka-receiver-job ジョブのジョブ実行をリストします。
        ibmcloud ce jobrun list --job kafka-receiver-job
        ```
    2. **`ibmcloud ce jobrun logs`** コマンドを使用して、特定のジョブ実行のログを取得します。
    
    ```txt {: pre}
        ibmcloud ce jobrun logs -n kafka-receiver-job-abcde
        ```
        出力例
    
        ```txt {: screen}
        Getting logs for all instances of job run 'kafka-receiver-job-abcde'...
        Getting jobrun 'kafka-receiver-job-abcde'...
        Getting instances of jobrun 'kafka-receiver-job-abcde'...
        OK
        kafka-receiver-job-abcde-0-0/kafka-receiver-job:
        Hello from helloworld! I'm a batch job! Index: 0
        Hello World from:
        . ___  __  ____  ____
        ./ __)/  \(    \(  __)
        ( (__(  O )) D ( ) _)
        .\___)\__/(____/(____)
        .____  __ _   ___  __  __ _  ____
        (  __)(  ( \ / __)(  )(  ( \(  __)
        .) _) /    /( (_ \ )( /    / ) _)
        (____)\_)__) \___/(__)\_)__)(____)
        Some Env Vars:
        --------------
        CE_DATA=test1: 2
        CE_DOMAIN=us-south.codeengine.appdomain.cloud
        CE_ID=partition:0/offset:249
        CE_JOB=kafka-receiver-job
        CE_JOBRUN=kafka-receiver-job-abcde
        CE_SOURCE=/apis/v1/namespaces/p99k7iy919d/kafkasources/kafkasub-job-ui#kafka-topic1
        CE_SPECVERSION=1.0
        CE_SUBDOMAIN=p99k7iy919d
        CE_SUBJECT=partition:0#249
        CE_TIME=2022-06-21T12:19:24.06Z
        CE_TYPE=dev.knative.kafka.event
        HOME=/root
        HOSTNAME=kafka-receiver-job-abcde-0-0
        JOB_INDEX=0
        KUBERNETES_PORT=tcp://172.21.0.1:443
        KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
        KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
        KUBERNETES_PORT_443_TCP_PORT=443
        KUBERNETES_PORT_443_TCP_PROTO=tcp
        KUBERNETES_SERVICE_HOST=172.21.0.1
        KUBERNETES_SERVICE_PORT=443
        KUBERNETES_SERVICE_PORT_HTTPS=443
        PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        PWD=/
        SHLVL=1
        z=Set env var 'SHOW' to see all variables
        ```
    Kafka レシーバー・ジョブ (`icr.io/codeengine/codeengine`) を使用する場合は、レシーバー・ジョブのログで `CE_DATA` を検索して、受信したメッセージを確認します。
    
    なお、ジョブの実行に関するログ情報は1時間しか保持されませんのでご注意ください。 アプリまたはジョブのログの表示について詳しくは、 [ログの表示](/docs/codeengine?topic=codeengine-logging) を参照してください。
    
    
    
    

ジョブに配信される Kafka イベント用の環境変数

ジョブに配信されるすべてのイベントは、環境変数として受信されます。 これらの環境変数には「 CE_ 」というプレフィックスが付いており、 CloudEvents 仕様 を基にしています。

各イベントには、イベントがジョブに配信されるたびに表示されるいくつかの共通の環境変数が含まれています。 各イベントの実際の変数のセットには、これより多くのオプションが含まれる可能性があります。 詳細については、「 CloudEvent 」の属性を参照してください。

次の表は、 Kafka のイベントに固有の環境変数について説明したものです。

イベントの環境変数
変数 説明
CE_DATA イベントのデータ (本文)。
CE_DOMAIN アプリケーション (およびプロジェクト) の URL のドメイン名の部分です。
CE_ID イベントの固有 ID。ただし、イベントが再生された場合は、同じ ID が割り当てられます。
CE_SOURCE このイベントがイベント・プロデューサーから生成された場所を示す URI 参照。 Kafka イベントの場合、このヘッダーの形式は /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME] です。
CE_SPECVERSION CloudEvents 仕様のバージョン。 この値は常に 1.0 です。
CE_SUBDOMAIN アプリケーション (およびプロジェクト) に関連付けられる URL のサブドメインの部分です。 Kubernetes に詳しい人にとって、CE_SUBDOMAIN はプロジェクトに関連付けられた Kubernetes 名前空間に対応するものです。
CE_SUBJECT Kafka パーティション番号とオフセット。 例えば、 partition:0#1 は区画 0 およびオフセット 1 を参照します。
CE_TIME イベントが生成された時刻。
CE_TYPE イベントのタイプ。 Kafka イベントの場合、これは dev.knative.kafka.event です。

出力例

CE_DATA={"message":"This is a test message #","message_number":1}
CE_DOMAIN=us-south.codeengine.appdomain.cloud
CE_ID=partition:0/offset:46
CE_SOURCE=/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription-job#kafka-topic1
CE_SPECVERSION=1.0
CE_SUBDOMAIN=ewgz38l13ts
CE_SUBJECT=partition:0#46
CE_TIME=2021-09-27T18:02:17.7Z
CE_TYPE=dev.knative.kafka.event

Kafka イベント・サブスクリプションの表示および更新

Kafka のイベント購読に関する詳細を確認したり、購読内容を更新したりすることができます。

コンソールからの Kafka イベント・サブスクリプションの表示および更新

  • イベントの購読に関する情報を確認するには

    1. Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
    2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。
  • イベントの購読を更新するには

    1. 購読ページにアクセスしてください。 サブスクリプション・ページにナビゲートするには、「イベント・サブスクリプション」ページに移動し、更新するサブスクリプションの名前をクリックします。
    2. サブスクリプションを更新します。 例えば、 Kafka サブスクリプションのトピックを別のトピックに変更します。 「メッセージ・ブローカーの詳細」 タブで、「トピック」セクションから既存のトピックを削除し、新規トピックの名前を追加します。
    3. **「保存」**をクリックして変更を保存します。

CLI を使用した Kafka イベント・サブスクリプションの表示および更新

  • CLI でイベント・サブスクリプションに関する情報を表示するには、 ibmcloud ce subscription kafka get コマンドを使用します。

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    出力例

    Getting Kafka event subscription 'mykafkasubscription'...
    OK
    Name:               mykafkasubscription
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    Project ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Age:                2m4s
    Created:            2022-06-18T16:59:12-04:00
    Destination Type:                 app
    Destination:                      kafka-receiver-app2
    Brokers:
    broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    Consumer Group:                   knative-kafka-source-c577b304-dccd-40c8-bb62-138c39f6112a
    Topics:
    kafka-topic1
    Secret key reference (user):      kafka-subscription-secret.username
    Secret key reference (password):  kafka-subscription-secret.password
    Ready:                            true
    Conditions:
    Type                     OK    Age  Reason
    ConnectionEstablished    true  53m
    InitialOffsetsCommitted  true  53m
    Ready                    true  52m
    Scheduled                true  52m
    SinkProvided             true  53m
    Events:
    Type     Reason           Age                Source                  Messages
    Normal   FinalizerUpdate  53m                kafkasource-controller  Updated "mykafkasubscription" finalizers
    
  • CLI でイベント・サブスクリプションを更新するには、 ibmcloud ce subscription kafka update コマンドを使用します。 以下の例では、トピック名を更新します。

    ibmcloud ce sub kafka update -n mykafkasubscription --topic kafka-topic2
    

    以下の ibmcloud ce subscription kafka updateKafka サブスクリプションの値を更新するには、このコマンドを使用できます。 ただし、このコマンドを使用してコンシューマー・グループの値を変更することはできません。 サブスクリプションを更新して別のトピックを参照するようにしたい場合は、サブスクリプションを更新する前に、 Kafka というトピックが存在することを確認してください。

Kafka のイベント購読を削除する

Kafka のサブスクリプションが不要になった場合は、それを削除することができます。

サブスクリプションを削除すると、 Event Streams サービスインスタンスのサービス認証情報を使用して、 Event Streams サービスインスタンスからコンシューマーグループが削除されます。 サブスクリプションを削除する時点で、サービス認証情報がすでに削除されているか、無効になっている場合、 Event Streams サービスインスタンスからコンシューマーグループを削除することはできません。 Code Engine の Kafka イベントの購読削除リクエストが失敗しました。

コンソールから Kafka のサブスクリプションを削除する

  1. Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
  2. 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。
  3. アプリケーションまたはジョブから削除するサブスクリプションを、サブスクリプションのリストから削除します。

サブスクリプションに関連付けられているアプリまたはジョブを削除しても、サブスクリプションは削除されません。 アプリケーションまたはジョブ (あるいは同じ名前の別のアプリまたはジョブ) を再作成すると、サブスクリプションはそのアプリまたはジョブに再接続します。

CLI を使用して「 Kafka 」のサブスクリプションを削除する

Kafka のサブスクリプションは、 ibmcloud ce subscription kafka delete コマンドを実行することで、xml-ph-0000@deepl.internalのサブスクリプションを削除できます。

たとえば、 mykafkasubscription という名前の「 Kafka 」サブスクリプションを削除するには、次のコマンドを使用します

ibmcloud ce subscription kafka delete --name mykafkasubscription

サブスクリプションに関連付けられているアプリまたはジョブを削除しても、サブスクリプションは削除されません。 代わりに、サブスクリプションはアプリまたはジョブの可用性に依存するため、 falseの作動可能状態に移行します。 アプリケーションまたはジョブ (あるいは同じ名前の別のアプリまたはジョブ) を再作成すると、サブスクリプションは再接続され、作動可能状態はtrueになります。

追加のイベント属性の定義

サブスクリプションを作成するときに、生成される何らかのイベントに含めるための追加の CloudEvent 属性を定義できます。 これらの属性は、イベントの配信において他の CloudEvent 属性と同様に表示されます。 既存の CloudEvent 属性の名前を指定することにした場合、イベントに含まれていた元の値がオーバーライドされます。

追加属性を定義するには、ibmcloud ce subscription kafka create CLI コマンドで--extensionオプションを使用します。

詳しくは、他の CloudEvents 仕様を使用できますか? を参照してください。