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 環境のセットアップ
-
IBM Cloud CLI をダウンロードしてインストールします。 IBM Cloud CLI にログインします。
ibmcloud login -
Code Engine CLI をダウンロードしてインストールします。
ibmcloud plugin install code-engine -f -
Event Streams サービスを使用して Kafka インスタンスを作成するには、 Event Streams CLI をダウンロードしてインストールします。
ibmcloud plugin install event-streams -f -
IBM Cloud アカウントにログインし、リソース・グループをターゲットにします。 以下のコマンドを実行して、リソース・グループをターゲットに設定します。 リソースグループの一覧を取得するには、
ibmcloud resource groupsコマンドを実行してください。ibmcloud target -g <resource_group>
Kafka インスタンスの設定
-
Event Streamsのサービス・インスタンスを作成します。 Event Streams CLI サービスの名前は
messagehubです。 この例では、myeventstreamという名前の Event Streams サービス・インスタンスを作成します。ibmcloud resource service-instance-create myeventstream messagehub lite us-south -
サービス・インスタンスに資格情報を提供するためのサービス・キーを作成します。
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サービス・キーの
user、password、およびkafka-brokers_saslの値をメモします。 この情報は、 Code Engine Kafka サブスクリプションをセットアップするときに必要になります。passwordとapikeyの値は、 Event Streams サービス・インスタンスのサービス・キーで同じです。ibmcloud resource service-key myeventstream-keyコマンドを使用して、サービス・キー情報を取得することもできます。 -
Event Streams サービス・インスタンスに関連する Event Streams プラグインを初期化します。
ibmcloud es init --instance-name myeventstream -
「 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 」アプリケーションを作成するには、以下の手順を実行してください。
-
以下の情報を使用して、
kafka-sender-appという Code Engine アプリケーション を作成します。- このアプリの
icr.io/codeengine/kafka-senderコンテナー・イメージを参照します。 このイメージはsender.goからビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプル送信側アプリには、passwordとBROKERSの値が必要です。 - 「環境変数 (オプション)」 セクションで、以下の環境変数を追加します。
- リテラル環境変数
BROKERSを追加します。 このキーの値には、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされている 1 つ以上のブローカー・ホストを指定します。 - 別の環境変数を 「完全なシークレットの参照」(
kafka-subscription-secret) に追加します。 このシークレットには、passwordの資格情報が含まれています。
- リテラル環境変数
- (オプション) 「リソース」&「スケーリング」 セクションで、インスタンスの最小数に
1を指定して、アプリが常に実行中のインスタンスを持ち、ゼロにスケーリングされないようにします。 ログを参照するときには、実行中のインスタンスが常に存在するようにアプリを構成すると役に立ちます。 実稼働環境で実行している場合は、アプリの実行インスタンスを保持するコスト、または Code Engine をゼロに自動スケーリングするかどうかを考慮してください。 デフォルトでは、使用されていない場合、アプリはゼロにスケーリングされます。 - 「作成」 をクリックして、アプリを作成およびデプロイします。
- このアプリの
-
このアプリケーションが
ready状況であることを確認します。
CLI を使用してイベントを送信するための Code Engine アプリの作成
CLI を使用して kafka-sender-app アプリケーションを作成するには、以下のコマンドを使用します。
-
以下の情報を使用して、
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 アプリの作成
- Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine アプリケーションを作成します。 例えば、
icr.io/codeengine/kafka-receiverイメージを使用するkafka-receiver-appというアプリケーションを作成します。 このイメージはreceiver.goからビルドされています。これは、 Samples for IBM Cloud Code Engine GitHub repoから入手できます。 このサンプルでは、環境変数は必要ありません。 - このアプリをデプロイした後、アプリの状況が
readyであることを確認します。
コンソールを使用する場合、Kafka イベントを受信するために使用するアプリやジョブは、Kafka イベントのサブスクリプションを作成する前に存在している必要はありません。 ただし、イベント・サブスクリプションの作成時にアプリケーションまたはジョブが存在しない場合は、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。
コンソールからアプリの Code Engine Kafka イベント・サブスクリプションを作成する
Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。
開始前に
- 使用する Code Engine プロジェクトを決定し、このプロジェクトが選択されていることを確認します。 プロジェクトの作成と操作 を参照してください。
コンソールからアプリケーションの「 Kafka 」イベントのサブスクリプションを作成するには、以下の手順を実行してください。
- Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
- 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。
- 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。
- 「イベント・サブスクリプションの作成 (Create an event subscription)」ページで、
Event Streams / Kafkaタイルを選択してイベント・タイプを指定します。 - 「一般」 に、
Event Streams / Kafkaサブスクリプションの名前を指定します。 **「次へ」**をクリックして、先に進みます。 - メッセージブローカーの詳細については、
- このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 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フィールドで確認できます。 - 「構成」 をクリックして、メッセージ・ブローカーへのアクセスを構成します。 Code Engine から Kafka または Event Streams インスタンスに対して認証するには、メッセージ・ブローカー・アクセス・シークレットを指定する必要があります。
- 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、
Noneを選択したりすることができます。 - シークレットを作成するには、 「作成」 をクリックします。 シークレットの名前、および
usernameとpasswordの値を指定します。usernameおよびpasswordの値は、 Kafka または Event Streams インスタンスのサービス資格情報の値と一致している必要があります。 例えば、usernameの値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされているuserの値です。passwordの値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされているapikeyの値です。 - この例では、以前に作成した既存の
kafka-subscription-secretシークレットを使用します。
- 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、
- メッセージ待ち行列の既存のトピックの名前を指定してください。 例えば、
kafka-topic1です。 サービス・インスタンスの既存のトピックに関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスに移動し、 「トピック」 を表示します。 - (オプション) コンシューマー・グループを指定します。 Kafka メッセージのコンシューマーは、 コンシューマー・グループ にグループ化できます。 コンシューマー・グループを使用している場合、トピック構成は、コンシューマー・グループ内のコンシューマーへのメッセージ・フローを制御します。 コンシューマーがコンシューマー・グループに追加されたり、コンシューマー・グループから削除されたりするたびに、そのトピックからのメッセージ・フローが変更される可能性があります。 このアクションにより、既存のコンシューマーがそのトピックからメッセージを受信しなくなる可能性があります。
- **「次へ」**をクリックして、先に進みます。
- このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 Kafka メッセージブローカーのホストを指定します。 ブローカー・ホスト、トピック、およびアクセス資格情報に関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスのサービス資格情報の詳細を表示します。 例えば、
- イベントコンシューマについては、イベントを受信するアプリケーションとして「 Code Engine 」を指定してください。 定義済みのアプリケーションおよびジョブのリストから選択することも、まだ作成されていないアプリ (またはジョブ) の名前を指定することもできます。 コンソールでイベント・サブスクリプションを作成するときに、アプリケーションまたはジョブが存在している必要はありません。 ただし、サブスクリプションが作成されると、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。
サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。 この例では、
icr.io/codeengine/kafka-receiverイメージを参照するkafka-receiver-appアプリケーションを使用します。 アプリが存在しない場合は、 Kafka サブスクリプションの作成後に、アプリケーションの名前を指定し、 アプリケーションを作成 します。 アプリケーションの場合のみ、オプションでパスを指定できます。 デフォルトでは、イベントは、宛先アプリケーションのルート URL にルーティングされます。 パスを指定すると、アプリ内の別の宛先にイベントを送信できます。 例えば、サブスクリプション・パスに/eventsが指定されている場合、イベントはhttps://<base application URL>/eventsに送信されます。 **「次へ」**をクリックして、先に進みます。 - まとめとして、 Kafka のイベント購読設定を確認し、必要に応じて変更を行ってください。 準備ができたら、「 作成 」をクリックして、 Kafka のサブスクリプションを作成してください。
コンソールから受信側アプリへのイベントの送信
kafka-receiver-app アプリケーションを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、受信アプリケーションにメッセージイベントを送信してください。
-
受信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、イベントを確認します。
-
(オプション) 送信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、送信されたイベントに関する情報を確認します。
-
ロギングが開始されたら、
curlでkafka-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 アプリの作成
開始前に
-
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に送信されます。 -
このアプリをデプロイした後、
app getコマンドを実行して、アプリの状況がreadyであることを確認します。ibmcloud ce app get -n kafka-receiver-app2
CLI を使用したアプリの Code Engine Kafka イベント・サブスクリプションの作成
CLI を使用して、 Kafka のイベントサブスクリプションを作成できます。これにより、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係が定義されます。
-
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 -
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 を使用して、受信アプリケーションにメッセージイベントを送信してください。
-
を使用して、デスティネーション・アプリのパブリック URL、
kafka-sender-app。ibmcloud 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 -
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" -
ログ内のイベントを表示します。 有効なブローカー、トピック、およびアクセス・シークレットを使用して 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 ジョブの作成
- Kafka メッセージのイベント・コンシューマーとして機能し、 Kafka イベントを受信する Code Engine ジョブ を作成します。 たとえば、「
kafka-receiver-job」という名前のジョブを作成し、サンプルイメージ「icr.io/codeengine/codeengine」を使用するようにします。 この画像は、 IBM Cloud Code Engine GitHub リポジトリ用のサンプル から入手可能な「codeengine.go」を基に作成されています。 このサンプルでは、環境変数は必要ありません。 - このジョブを作成した後、そのジョブが
ready状況であることを確認します。
コンソールを使用する場合、Kafka イベントを受信するために使用するアプリやジョブは、Kafka イベントのサブスクリプションを作成する前に存在している必要はありません。 ただし、イベント・サブスクリプションの作成時にアプリケーションまたはジョブが存在しない場合は、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。 サブスクリプションが準備完了状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、アプリまたはジョブを作成する必要があります。
コンソールからジョブの Code Engine Kafka イベント・サブスクリプションを作成する
Kafka のイベントサブスクリプションは、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係を定義します。
開始前に
- 使用する Code Engine プロジェクトを決定し、このプロジェクトが選択されていることを確認します。 プロジェクトの作成と操作 を参照してください。
コンソールからアプリケーションの「 Kafka 」イベントのサブスクリプションを作成するには、以下の手順を実行してください。
- Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
- 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックします。
- 「イベント・サブスクリプション (Event subscriptions)」ページで**「作成」**をクリックして、サブスクリプションを作成します。
- 「イベント・サブスクリプションの作成 (Create an event subscription)」ページで、
Event Streams / Kafkaタイルを選択してイベント・タイプを指定します。 - 「一般」 に、
Event Streams / Kafkaサブスクリプションの名前を指定します。 **「次へ」**をクリックして、先に進みます。 - メッセージブローカーの詳細については、
- このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 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"を指定します。 - 「構成」 をクリックして、メッセージ・ブローカーへのアクセスを構成します。 Code Engine から Kafka または Event Streams インスタンスに対して認証するには、メッセージ・ブローカー・アクセス・シークレットを指定する必要があります。
- 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、
Noneを選択したりすることができます。 - シークレットを作成するには、 「作成」 をクリックします。 シークレットの名前、および
usernameとpasswordの値を指定します。usernameおよびpasswordの値は、 Kafka または Event Streams インスタンスのサービス資格情報の値と一致している必要があります。 例えば、usernameの値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされているuserの値です。passwordの値は、 Event Streams サービス・インスタンスのサービス資格情報の詳細にリストされているapikeyの値です。 - この例では、以前に作成した既存の
kafka-subscription-secretシークレットを使用します。
- 新しいシークレットを作成したり、既存のシークレットを選択したり、メッセージ・ブローカーへのアクセスに資格情報が必要ない場合は、
- メッセージ待ち行列の既存のトピックの名前を指定してください。 例えば、
kafka-topic1です。 サービス・インスタンスの既存のトピックに関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスに移動し、 「トピック」 を表示します。 - (オプション) コンシューマー・グループを指定します。 Kafka メッセージのコンシューマーは、 コンシューマー・グループ にグループ化できます。 コンシューマー・グループを使用している場合、トピック構成は、コンシューマー・グループ内のコンシューマーへのメッセージ・フローを制御します。 コンシューマーがコンシューマー・グループに追加されたり、コンシューマー・グループから削除されたりするたびに、そのトピックからのメッセージ・フローが変更される可能性があります。 このアクションにより、既存のコンシューマーがそのトピックからメッセージを受信しなくなる可能性があります。
- **「次へ」**をクリックして、先に進みます。
- このサブスクリプションを通じてイベントとしてメッセージを受信するメッセージキューの、 Kafka メッセージブローカーのホストを指定します。 ブローカー・ホスト、トピック、およびアクセス資格情報に関する情報を取得するには、 Event Streams コンソールでサービス・インスタンスのサービス資格情報の詳細を表示します。 例えば、
- イベントコンシューマについては、イベントを受信する「 Code Engine 」ジョブを指定してください。 定義済みのジョブおよびアプリのリストから選択することも、まだ作成されていないジョブ (またはアプリ) の名前を指定することもできます。 コンソールでイベント・サブスクリプションを作成するときに、アプリケーションまたはジョブが存在している必要はありません。 ただし、サブスクリプションが作成されると、コンシューマーが存在しないことがサブスクリプションの状況に反映されます。
サブスクリプションが作動可能状態になり、このサブスクリプションを介してイベントを受信できるようになる前に、ジョブ (またはアプリ) を作成する必要があります。 この例では、コンポーネント・タイプとして
jobを選択し、イベントを受信するコンポーネントとしてicr.io/codeengine/codeengineイメージを参照するkafka-receiver-jobジョブを使用します。 該当するジョブが存在しない場合は、ジョブの名前を指定し、 Kafka サブスクリプションの作成後に そのジョブを作成してください。 アプリケーションの場合のみ、オプションでパスを指定できます。 **「次へ」**をクリックして、先に進みます。 - まとめとして、 Kafka のイベント購読設定を確認し、必要に応じて変更を行ってください。 準備ができたら、「 作成 」をクリックして、 Kafka のサブスクリプションを作成してください。
コンソールから受信ジョブへのイベントの送信
「 kafka-receiver-job 」ジョブを参照する Kafka イベントのサブスクリプションが作成されたので、 kafka-sender-app を使用して、メッセージイベントを受信側ジョブに送信してください。
-
レシーバー・ジョブのロギングを開始して、 コンソールからジョブ・ログを表示 し、イベントを確認します。
-
(オプション) 送信側アプリケーションのロギングを開始して、 コンソールからアプリケーション・ログを表示 し、送信されたイベントに関する情報を確認します。
-
ロギングが開始されたら、
curlでkafka-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 ジョブの作成
開始前に
-
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 -
(オプション) このジョブを作成した後、
job getコマンドを実行して、このジョブに関する情報を表示します。ibmcloud ce job get -n kafka-receiver-job
CLI を使用したジョブの Code Engine Kafka イベント・サブスクリプションの作成
CLI を使用して、 Kafka のイベントサブスクリプションを作成できます。これにより、 Kafka のイベントプロデューサー(送信者)とコンシューマー(受信者)間の関係が定義されます。
-
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 -
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 を使用して、受信アプリケーションにメッセージイベントを送信してください。
-
コマンドを使用して、インストール先アプリのパブリック URL、
kafka-sender-app。ibmcloud ce app getコマンドを使ってアプリの URL。ibmcloud ce app get -n kafka-sender-app --output url出力例
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
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" -
ログ内のイベントを表示します。 有効なブローカー、トピック、およびアクセス・シークレットを使用して Kafka イベント・サブスクリプションが作成され、そのトピックに関するメッセージを生成する Kafka アプリケーション (
kafka-sender-appなど) がある場合、kafka-receiver-jobなどの Kafka メッセージを受信する宛先 Code Engine ジョブのログでイベントを確認できます。curlを使用して送信されるメッセージごとに、同じ数のジョブ実行が Kafka イベントによってトリガーされます。 ジョブに送信されたイベントを表示するには、ibmcloud ce jobrun logsコマンドを使用します。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 イベント・サブスクリプションの表示および更新
-
イベントの購読に関する情報を確認するには
- Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
- 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。
-
イベントの購読を更新するには
- 購読ページにアクセスしてください。 サブスクリプション・ページにナビゲートするには、「イベント・サブスクリプション」ページに移動し、更新するサブスクリプションの名前をクリックします。
- サブスクリプションを更新します。 例えば、 Kafka サブスクリプションのトピックを別のトピックに変更します。 「メッセージ・ブローカーの詳細」 タブで、「トピック」セクションから既存のトピックを削除し、新規トピックの名前を追加します。
- **「保存」**をクリックして変更を保存します。
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 のサブスクリプションを削除する
- Code Engine プロジェクトページ から、自分のプロジェクトに移動します。
- 「概要」ページで、**「イベント・サブスクリプション (Event subscriptions)」**をクリックし、定義済みのサブスクリプションのリストを表示します。
- アプリケーションまたはジョブから削除するサブスクリプションを、サブスクリプションのリストから削除します。
サブスクリプションに関連付けられているアプリまたはジョブを削除しても、サブスクリプションは削除されません。 アプリケーションまたはジョブ (あるいは同じ名前の別のアプリまたはジョブ) を再作成すると、サブスクリプションはそのアプリまたはジョブに再接続します。
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 仕様を使用できますか? を参照してください。