Zusammenarbeit mit dem Veranstalter „ Kafka “

Ein „ Code Engine “- Kafka-Abonnement überwacht, ob neue Nachrichten in einer „ Kafka “-Instanz erscheinen. Wenn Sie eine Subskription für eine Gruppe von Themen erstellen, empfängt Ihre Anwendung oder Ihr Job ein separates Ereignis für jede neue Nachricht, die in einem der Themen angezeigt wird. Pro Projekt können Sie maximal 100 „ Kafka “-Abonnements erstellen.

Sie können zwar jede beliebige „ Kafka “-Instanz verwenden, in den Beispielen dieses Themas wird jedoch der Dienst „ IBM® Event Streams for IBM Cloud® “ verwendet. „ Event Streams “ ist ein „ IBM “-Ereignis-Streaming-Dienst für „ Kafka “-Ereignisse. Weitere Informationen zu diesem Dienst finden Sie unter Event Streams Dokumentation.

Einrichten des „ Kafka “-Ereignis-Producers

Sie können Ihren „ Kafka “-Nachrichtenproduzenten so einrichten, dass er Nachrichten an die Ereignisabonnements „ Code Engine “ und „ Kafka “ sendet. Verwenden Sie Ihr „ Code Engine “- Kafka-Ereignisabonnement, um Anwendungen oder Jobs auszulösen, sobald eine „ Kafka “-Nachricht eingeht.

Erstellen Sie zunächst eine Event Streams-Serviceinstanz für Ihren Event-Streaming-Service. Während Sie die Konsole oder die Befehlszeilenschnittstelle verwenden können, wird in den folgenden Schritten beschrieben, wie Sie den Ereigniserzeuger Event Streams mit der Befehlszeilenschnittstelle einrichten.

Event Streams-CLI-Umgebung einrichten

  1. Laden Sie die IBM Cloud-Befehlszeilenschnittstelle herunter und installieren Sie diese. Melden Sie sich bei der IBM Cloud-CLI an.

    ibmcloud login
    
  2. Laden Sie die Code Engine-Befehlszeilenschnittstelle herunter und installieren Sie sie.

    ibmcloud plugin install code-engine -f
    
  3. Wenn Sie den Service Event Streams zum Erstellen Ihrer Kafka-Instanz verwenden möchten, laden Sie die Event Streams-CLI herunter und installieren Sie sie.

    ibmcloud plugin install event-streams -f
    
  4. Melden Sie sich bei Ihrem IBM Cloud-Konto an und legen Sie eine Ressourcengruppe als Ziel fest. Führen Sie den folgenden Befehl aus, um eine Ressourcengruppe als Ziel festzulegen. Um eine Liste Ihrer Ressourcengruppen anzuzeigen, führen Sie den Befehl „ ibmcloud resource groups “ aus.

    ibmcloud target -g <resource_group>
    

Einrichten Ihrer „ Kafka “-Instanz

  1. Erstellen Sie eine Serviceinstanz für Event Streams. Der Name des Event Streams-CLI-Service lautet messagehub. Erstellen Sie für dieses Beispiel eine Event Streams-Serviceinstanz namens myeventstream.

    ibmcloud resource service-instance-create myeventstream messagehub lite us-south
    
  2. Erstellen Sie einen Serviceschlüssel, um Berechtigungsnachweise für Ihre Serviceinstanz bereitzustellen.

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

    Beispielausgabe

    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
    

    Notieren Sie sich die Werte für user, password und kafka-brokers_sasl für Ihren Serviceschlüssel. Sie benötigen diese Informationen, wenn Sie Ihre Subskription für Code Engine Kafka einrichten. Die Werte für password und apikey sind im Serviceschlüssel für Ihre Event Streams-Serviceinstanz identisch. Sie können auch den Befehl ibmcloud resource service-key myeventstream-key verwenden, um die Serviceschlüsselinformationen abzurufen.

  3. Initialisieren Sie das Plug-in Event Streams relativ zu Ihrer Event Streams-Serviceinstanz.

    ibmcloud es init --instance-name myeventstream
    
  4. Erstellen Sie ein „ Event Streams “-Thema.

    ibmcloud es topic-create kafka-topic1
    

Einrichten einer Code Engine-Beispielapp zum Erzeugen von Kafka-Nachrichten

Verwenden Sie für dieses Szenario eine Anwendung Code Engine, um als Ereigniserzeuger von Kafka-Nachrichten zu fungieren. Der Zweck dieser Anwendung ist das Herstellen einer Verbindung zu Ihrer Event Streams-Instanz und das Senden von Kafka-Nachrichten. Diese Anwendung verwendet die Code Engine Kafka-Beispielapp für Sender zum Senden von Kafka-Nachrichten. Dieses Beispielabsender-Image erfordert die Umgebungsvariable BROKERS und einen geheimen Schlüssel, der die password-Berechtigungsnachweise enthält. Sie können diese Anwendung über die Konsole oder mithilfe der CLI erstellen.

Achten Sie darauf, den Header „ Content-Type “ anzugeben, wenn Sie „ Kafka “-Nachrichten an Event Streams senden. Geben Sie diesen Header an, damit der Consumer Nachrichten mit dem erwarteten Inhaltstyp empfangen kann, z. B. application/json.

Geheimen Schlüssel mit Berechtigungsnachweisen erstellen, die für die Kafka-Beispiele erforderlich sind

Bevor Sie die Anwendung Code Engine erstellen, um Kafka-Nachrichten zu senden, erstellen Sie einen geheimen Schlüssel Code Engine, der die erforderlichen Berechtigungsnachweise enthält.

Vorbereitende Schritte

Der Einfachheit halber erstellen Sie in diesem Szenario ein Geheimnis ( kafka-subscription-secret), das die Anmeldeinformationen enthält, die sowohl für die Absender-Beispiel-App „ Kafka “ als auch für das Ereignisabonnement „ Kafka “ erforderlich sind, das die Empfänger-Beispiel-App „ Kafka “ verwendet. Diese Anmeldedaten sind erforderlich, damit die Beispiel-Sender-App „ Kafka “ und das Ereignisabonnement „ Code Engine “ unter Kafka mit der Service-Instanz unter Event Streams kommunizieren können. Es ist zwar nicht erforderlich, diesen geheimen Schlüssel vor der Erstellung der „ Kafka “-Absender-App und des Ereignisabonnements anzulegen, doch vereinfacht dieser Schritt die erforderlichen Vorgänge.

Geheimen Schlüssel mit Berechtigungsnachweisen erstellen, die für die Kafka-Beispiele in der Konsole erforderlich sind

Rufen Sie zum Erstellen des geheimen kafka-subscription-secret-Schlüssels über die Konsole Secrets and configmaps auf, klicken Sie auf Create und wählen Sie den zu erstellenden geheimen Schlüssel aus. Weitere Informationen finden Sie unter Geheimen Schlüssel über die Konsole erstellen.

  • Geben Sie den Schlüssel username mit dem Wert user an, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Für die Serviceinstanz von Event Streams lautet dieser Wert token. Dieser Schlüssel ist für die Authentifizierung zwischen der Kafka-Ereignissubskription Code Engine und dem Kafka-Nachrichtenbroker erforderlich.
  • Geben Sie den Schlüssel password mit dem Wert apikey an, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Dieser Schlüssel ist für das Senderbeispiel und zum Aktivieren der Kommunikation zwischen der Ereignissubskription Code Engine Kafka und dem Kafka-Nachrichtenbroker erforderlich.
Geheimen Schlüssel mit Berechtigungsnachweisen erstellen, die für die Kafka-Beispiele über die Befehlszeilenschnittstelle erforderlich sind

Fügen Sie zum Erstellen des geheimen Schlüssels kafka-subscription-secret über die CLI eine Literalumgebungsvariable für password und username hinzu. Weitere Informationen finden Sie unter Geheimen Schlüssel mit der Befehlszeilenschnittstelle erstellen.

  • Geben Sie den Schlüssel username mit dem Wert user an, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Für die Serviceinstanz von Event Streams lautet dieser Wert token. Dieser Schlüssel ist für die Authentifizierung zwischen der Kafka-Ereignissubskription Code Engine und dem Kafka-Nachrichtenbroker erforderlich.

  • Geben Sie den Schlüssel password mit dem Wert apikey an, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Dieser Schlüssel ist für das Senderbeispiel und zum Aktivieren der Kommunikation zwischen der Ereignissubskription Code Engine Kafka und dem Kafka-Nachrichtenbroker erforderlich.

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

    Beispiel:

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

App Code Engine zum Senden von Ereignissen erstellen

Erstellen Sie eine „ Code Engine “-App, um eine Verbindung zu Ihrer „ Event Streams “-Instanz herzustellen und „ Kafka “-Nachrichten an einen Empfänger von „ Kafka “-Nachrichten ( Kafka-Consumer) zu erzeugen (zu senden).

Code Engine-App zum Senden von Ereignissen über die Konsole erstellen

Um die Anwendung „ kafka-sender-app “ über die Konsole zu erstellen, führen Sie die folgenden Schritte aus.

  1. Erstellen Sie eine Code Engine-Anwendung mit dem Namen kafka-sender-app und den folgenden Informationen.

    1. Referenzieren Sie das icr.io/codeengine/kafka-sender-Container-Image für diese App. Dieses Image wird aus sender.go erstellt, das über die -Beispiele für IBM Cloud Code Engine GitHub repoverfügbar ist. Diese Beispiel-Sender-App erfordert Werte für password und BROKERS.
    2. Fügen Sie im Abschnitt Umgebungsvariablen (optional) die folgenden Umgebungsvariablen hinzu.
      1. Fügen Sie die Literalumgebungsvariable BROKERS hinzu. Geben Sie als Wert dieses Schlüssels mindestens einen der Broker-Hosts an, die in den Details der Serviceberechtigungsnachweise in der Serviceinstanz von Event Streams aufgelistet sind.
      2. Fügen Sie eine weitere Umgebungsvariable hinzu, um auf den vollständigen geheimen Schlüssel zu verweisen, kafka-subscription-secret. Dieser geheime Schlüssel enthält die Berechtigungsnachweise für password.
    3. (Optional) Geben Sie im Abschnitt Ressourcen & Skalierung 1 für die minimale Anzahl von Instanzen an, damit die App immer eine Instanz hat, die aktiv ist und nicht auf null skaliert wird. Eine solche Konfiguration, bei der die Anwendung stets über eine aktive Instanz verfügt, ist nützlich, wenn Sie Protokolle anzeigen. Wenn Sie in einer Produktionsumgebung arbeiten, berücksichtigen Sie die Kosten für das Beibehalten einer aktiven Instanz Ihrer App oder ob Code Engine automatisch auf null skaliert werden soll. Standardmäßig wird die App auf null skaliert, wenn sie nicht verwendet wird.
    4. Klicken Sie auf Create, um Ihre App zu erstellen und bereitzustellen.
  2. Vergewissern Sie sich, dass sich diese App im Status ready befindet.

App Code Engine zum Senden von Ereignissen über die Befehlszeilenschnittstelle erstellen

Verwenden Sie die folgenden Befehle, um die kafka-sender-app-Anwendung über die Befehlszeilenschnittstelle zu erstellen.

  1. Erstellen Sie eine Code Engine-Anwendung mit dem Namen kafka-sender-app und den folgenden Informationen.

    • Geben Sie die Option --image an, um auf das Container-Image icr.io/codeengine/kafka-sender zu verweisen. Dieses Image wird aus sender.go erstellt, das über die -Beispiele für IBM Cloud Code Engine GitHub repoverfügbar ist. Diese Beispiel-Sender-App erfordert die password-Berechtigungsnachweise, die in Ihrem kafka-subscription-secret gespeichert sind, und die Umgebungsvariable BROKERS.
    • Geben Sie die Option --env-from-secret an, um auf den vollständigen geheimen Schlüssel kafka-subscription-secret zu verweisen, der die password-Berechtigungsnachweise enthält.
    • Geben Sie die Option --env an, um die Literalumgebungsvariable BROKERS hinzuzufügen, und geben Sie den Namen eines der Broker-Hosts an, die in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet sind. Wenn Sie jedoch mehrere Broker-Hostnamen angeben möchten, verwenden Sie das Format --env BROKERS-broker1,broker2,broker3.
    • (optional) Geben Sie die Option „ --min-scale=1 “ an, damit die App stets über eine laufende Instanz verfügt und nicht auf null skaliert wird. Eine solche Konfiguration, bei der die Anwendung stets über eine aktive Instanz verfügt, ist nützlich, wenn Sie Protokolle anzeigen. Wenn Sie in einer Produktionsumgebung arbeiten, berücksichtigen Sie die Kosten für das Beibehalten einer aktiven Instanz Ihrer App oder ob Code Engine automatisch auf null skaliert werden soll. Standardmäßig wird die App auf null skaliert, wenn sie nicht verwendet wird.
    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
    

Code Engine für den Empfang von Kafka-Ereignissen für eine App einrichten

Damit „ Code Engine “ mit „ Kafka “-Ereignissen funktioniert, richten Sie über die Konsole oder die CLI ein Abonnement für „ Code Engine “- Kafka-Ereignisse ein, um eine Verbindung zu „ Kafka “-Ereignisbrokern herzustellen und auf „ Kafka “-Ereignisse zu warten. Richten Sie außerdem eine „ Code Engine “-App (oder einen Job) ein, die als Empfänger der „ Kafka “-Ereignisse fungiert. Das „ Kafka “-Ereignisabonnement definiert die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen.

Das Code Engine Kafka Ereignisabonnement stellt eine Verbindung zu Ihrem Kafka Message Broker her und sendet HTTP Post-Anforderungen für jede eingehende Kafka Nachricht an die Empfängeranwendung. Weitere Informationen finden Sie im Thema Informationen zu HTTP-Headern und -Hauptteilen für Ereignisse.

Kafka-Ereignisse für eine App über die Konsole abonnieren

Über die Konsole können Sie ein Abonnement für „ Kafka “-Ereignisse einrichten, sodass Ereignisse an eine „ Code Engine “-Anwendung gesendet werden.

Code Engine-App zum Empfangen von Kafka-Ereignissen über die Konsole erstellen

  1. Erstellen Sie eine Code Engine-Anwendung als Ereigniskonsument von Kafka-Nachrichten und empfangen Sie die Kafka-Ereignisse. Erstellen Sie beispielsweise eine Anwendung mit dem Namen kafka-receiver-app, die das icr.io/codeengine/kafka-receiver-Image verwendet. Dieses Image wird aus receiver.go erstellt, das über die -Beispiele für IBM Cloud Code Engine GitHub repoverfügbar ist. Dieses Beispiel erfordert keine Umgebungsvariablen.
  2. Vergewissern Sie sich nach der Bereitstellung dieser App, dass sie sich im Status ready befindet.

Wenn Sie die Konsole verwenden, muss die App oder der Job, mit der bzw. dem Sie „ Kafka “-Ereignisse empfangen, nicht unbedingt bereits vorhanden sein, bevor Sie das Abonnement für das „ Kafka “-Ereignis erstellen. Wenn die App oder der Job jedoch beim Erstellen der Ereignissubskription nicht vorhanden ist, gibt der Status der Subskription an, dass der Konsument nicht vorhanden ist. Sie müssen die App oder den Job erstellen, bevor sich das Abonnement im Bereitstatus befindet und Ereignisse über dieses Abonnement empfangen kann.

Code Engine Kafka-Ereignissubskription für eine App über die Konsole erstellen

Das „ Kafka “-Ereignisabonnement definiert die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen.

Vorbereitende Schritte

Führen Sie die folgenden Schritte aus, um über die Konsole ein „ Kafka “-Ereignisabonnement für eine Anwendung zu erstellen.

  1. Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
  2. Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements.
  3. Klicken Sie auf der Seite 'Ereignisabonnements' auf Erstellen, um Ihr Abonnement zu erstellen.
  4. Wählen Sie auf der Seite 'Ereignissubskription erstellen' die Kachel Event Streams / Kafka aus, um den Ereignistyp anzugeben.
  5. Geben Sie für Allgemein einen Namen für die Event Streams / Kafka-Subskription an. Fahren Sie durch Klicken auf Weiter fort.
  6. Weitere Informationen zum Message Broker finden Sie unter,
    1. Geben Sie die Hosts des „ Kafka “-Message-Broker für die Nachrichtenwarteschlangen an, aus denen Nachrichten als Ereignisse über dieses Abonnement empfangen werden. Um Informationen zu den Broker-Hosts, Themen und Zugriffsberechtigungsnachweisen abzurufen, zeigen Sie die Details der Serviceberechtigungsnachweise für Ihre Serviceinstanz in der Event Streams-Konsole an. Geben Sie beispielsweise "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" für die Nachrichtenbrokerhosts für die myeventstream-key-Serviceinstanz an. Sie finden die Broker für die Serviceinstanz in Event Streams im Feld Kafka_brokers_sasl.
    2. Klicken Sie auf Konfigurieren, um den Zugriff auf den Nachrichtenbroker zu konfigurieren. Zur Authentifizierung von Code Engine bei Ihrer Kafka-oder Event Streams-Instanz müssen Sie einen geheimen Schlüssel für den Zugriff auf den Nachrichtenbroker bereitstellen.
      • Sie können einen neuen geheimen Schlüssel erstellen, einen vorhandenen geheimen Schlüssel auswählen oder, wenn keine Berechtigungsnachweise für den Zugriff auf die Nachrichtenbroker erforderlich sind, None wählen.
      • Klicken Sie zum Erstellen eines geheimen Schlüssels auf Erstellen. Geben Sie einen Namen für den geheimen Schlüssel und Werte für username und password an. Die Werte für username und password müssen mit den Werten in den Serviceberechtigungsnachweisen für die Instanz Kafka oder Event Streams übereinstimmen. Der Wert für username ist beispielsweise der Wert von user, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Der Wert für password ist der Wert von apikey, der in den Details der Serviceberechtigungsnachweise in der Event Streams-Serviceinstanz aufgelistet ist.
      • Verwenden Sie für dieses Beispiel den vorhandenen geheimen Schlüssel kafka-subscription-secret, der zuvor erstellt wurde.
    3. Geben Sie den Namen vorhandener Themen für die Nachrichtenwarteschlangen an. Beispiel: kafka-topic1. Um Informationen zu vorhandenen Themen für Ihre Serviceinstanz abzurufen, rufen Sie Ihre Serviceinstanz in der Event Streams-Konsole auf und zeigen Sie Themen an.
    4. (Optional) Geben Sie eine Consumergruppe an. Konsumenten von Kafka-Nachrichten können in Konsumentengruppen gruppiert werden. Wenn Sie Konsumentengruppen verwenden, steuert die Topickonfiguration den Nachrichtenfluss zu Konsumenten in der Konsumentengruppe. Wenn ein Konsument einer Konsumentengruppe hinzugefügt oder aus einer Konsumentengruppe entfernt wird, kann sich der Nachrichtenfluss aus diesem Thema ändern. Diese Aktion kann dazu führen, dass vorhandene Konsumenten keine Nachrichten mehr von diesem Topic empfangen.
    5. Fahren Sie durch Klicken auf Weiter fort.
  7. Geben Sie für den Event-Consumer die Anwendung „ Code Engine “ als Empfänger der Ereignisse an. Beachten Sie, dass Sie aus einer Liste definierter Anwendungen und Jobs auswählen können, oder Sie können einen Namen für eine App (oder einen Job) angeben, die bzw. der noch nicht erstellt wurde. Es ist nicht erforderlich, dass die App oder der Job vorhanden ist, wenn Sie die Ereignissubskription mit der Konsole erstellen. Wenn die Subskription erstellt wird, spiegelt der Status der Subskription jedoch wider, dass der Konsument nicht vorhanden ist. Sie müssen die App oder den Job erstellen, bevor sich das Abonnement im Bereitstatus befindet und Ereignisse über dieses Abonnement empfangen kann. Verwenden Sie für dieses Beispiel die kafka-receiver-app-Anwendung, die das icr.io/codeengine/kafka-receiver-Image referenziert. Wenn Ihre Anwendung nicht vorhanden ist, geben Sie den Namen Ihrer Anwendung an und erstellen Sie Ihre Anwendung, sobald Sie die Kafka-Subskription erstellen. Nur bei Anwendungen können Sie optional einen Pfad angeben. Ereignisse werden standardmäßig an die Stamm-URL der Zielanwendung weitergeleitet. Durch die Angabe eines Pfades können Sie Ereignisse an ein anderes Ziel innerhalb der App senden. Wenn in Ihrem Subskriptionspfad beispielsweise /events angegeben ist, werden die Ereignisse an https://<base application URL>/events gesendet. Fahren Sie durch Klicken auf Weiter fort.
  8. Überprüfen Sie abschließend die Einstellungen für Ihr „ Kafka “-Ereignisabonnement und nehmen Sie gegebenenfalls Änderungen vor. Wenn Sie bereit sind, klicken Sie auf „Erstellen“, um das „ Kafka “-Abonnement anzulegen.

Ereignisse über die Konsole an die empfangende App senden

Nachdem Sie nun Ihr „ Kafka “-Ereignisabonnement erstellt haben, das auf die Anwendung „ kafka-receiver-app “ verweist, verwenden Sie die Schnittstelle „ kafka-sender-app “, um Nachrichtenereignisse an die Empfängeranwendung zu senden.

  1. Starten Sie die Protokollierung für die Empfängeranwendung, um Anwendungsprotokolle über die Konsole anzuzeigen, um Ereignisse anzuzeigen.

  2. (optional) Starten Sie die Protokollierung für die Senderanwendung zum Anzeigen von Anwendungsprotokollen über die Konsole, um Informationen zu gesendeten Ereignissen anzuzeigen.

  3. Nachdem die Protokollierung gestartet wurde, rufen Sie die Anwendung kafka-sender-app mit curl auf und geben Sie die öffentliche Adresse URL der kafka-sender-app, den Namen Ihres Themas und die Anzahl der zu sendenden Nachrichten an. Sie können die öffentliche URL dieser Anwendung über die Registerkarte Domänenzuordnungen für Ihre Anwendung erhalten. Beispiel:

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

Achten Sie darauf, den Wert für 'curl' in Anführungszeichen einzuschließen, um sicherzustellen, dass er als einzelne Zeichenfolge behandelt wird.

Kafka-Ereignisse für eine App über die CLI abonnieren

Sie können die Befehlszeilenschnittstelle (CLI) verwenden, um ein „ Kafka “-Ereignisabonnement einzurichten, sodass Ereignisse an eine „ Code Engine “-Anwendung gesendet werden.

Ereignisse werden als HTTP-POST-Anforderungen an Anwendungen gesendet. Weitere Informationen zu den Daten, die in „ Kafka “-Ereignissen enthalten sind, finden Sie unter „ HTTP “-Header und -Inhaltsdaten für Ereignisse. Wenn Ihr Ereignis an einen „ Code Engine “-Job gesendet wird, erhält der Job die Ereignisse als Umgebungsvariablen. Weitere Informationen zu den Umgebungsvariablen für „ Kafka “-Abonnements finden Sie unter „ Umgebungsvariablen für Ereignisse “.

Code Engine-App für den Empfang von Kafka-Ereignissen über die Befehlszeilenschnittstelle erstellen

Vorbereitende Schritte

  1. Erstellen Sie eine Code Engine-Anwendung als Ereigniskonsument von Kafka-Nachrichten und empfangen Sie die Kafka-Ereignisse. Erstellen Sie beispielsweise eine Anwendung mit dem Namen kafka-receiver-app2, die das icr.io/codeengine/kafka-receiver-Image verwendet. Dieses Image wird aus receiver.go erstellt, das über die -Beispiele für IBM Cloud Code Engine GitHub repoverfügbar ist. Dieses Beispiel erfordert keine Umgebungsvariablen. Optional können Sie die Option „ --min-scale=1 “ angeben, damit die App stets über eine laufende Instanz verfügt und nicht auf null skaliert wird. Eine solche Konfiguration, bei der die Anwendung stets über eine aktive Instanz verfügt, ist nützlich, wenn Sie Protokolle anzeigen. Wenn Sie in einer Produktionsumgebung arbeiten, berücksichtigen Sie die Kosten für das Beibehalten einer aktiven Instanz Ihrer App oder ob Code Engine automatisch auf null skaliert werden soll. Standardmäßig wird die App auf null skaliert, wenn sie nicht verwendet wird.

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

    Ereignisse werden standardmäßig an die Stamm-URL der Zielanwendung weitergeleitet. Sie können Ereignisse an ein anderes Ziel innerhalb der App senden, indem Sie die Option --path verwenden. Wenn Ihre Subskription beispielsweise --path /event angibt, wird das Ereignis an https://<base application URL>/events gesendet.

  2. Führen Sie nach der Bereitstellung dieser App den Befehl app get aus, um zu bestätigen, dass sich die App im Status ready befindet.

    ibmcloud ce app get -n kafka-receiver-app2
    

Code Engine Kafka-Ereignissubskription für eine App über die Befehlszeilenschnittstelle erstellen

Mit der CLI können Sie ein „ Kafka “-Ereignisabonnement erstellen, das die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen definiert.

  1. Erstellen Sie eine Code Engine Kafka-Ereignissubskription für Ihre Kafka-Ereignisse mit dem Befehl ibmcloud ce sub kafka create. Verwenden Sie den geheimen Schlüssel kafka-subscription-secret, den Sie zuvor erstellt haben, um auf den Nachrichtenbroker zuzugreifen. Geben Sie die Brokerinformationen basierend auf den Serviceberechtigungsinformationen für Ihre Kafka-Ressource an. In diesem Beispiel können Sie die Brokerinformationen aus der Ausgabe des Befehls ibmcloud resource service-key myeventstream-key abrufen. Beachten Sie, dass Sie für jeden Broker für Ihr Thema die Option --broker angeben müssen. Die Option --destination gibt die Ressource Code Engine an, die die Ereignisse empfängt.

    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. Zeige die Details des Abonnements für das Ereignis „ Kafka “ an.

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    Beispielausgabe

    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
    

Ereignisse über die Befehlszeilenschnittstelle an die empfangende App senden

Nachdem Sie nun Ihr „ Kafka “-Ereignisabonnement erstellt haben, das auf die Anwendung „ kafka-receiver-app “ verweist, verwenden Sie die Schnittstelle „ kafka-sender-app “, um Nachrichtenereignisse an die Empfängeranwendung zu senden.

  1. Holen Sie sich die öffentliche URL der Ziel-App, kafka-sender-app, indem Sie den ibmcloud ce app get mit der Option --output url, um die URL Ihrer Anwendung zu finden.

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

    Beispielausgabe

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Führen Sie die Kafka-Ereigniserzeuger-App kafka-sender-app aus, um Ereignisse an die Zielanwendung Code Engine zu senden. Rufen Sie die Anwendung kafka-sender-app mit curl auf und geben Sie Werte für das Topic und die Anzahl der Nachrichten an. Verwenden Sie die Ausgabe des ibmcloud ce app get Befehls, um die öffentliche URL Ihrer App zu ermitteln. Achten Sie darauf, den Wert für 'curl' in Anführungszeichen einzuschließen, um sicherzustellen, dass er als einzelne Zeichenfolge behandelt wird.

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

    Beispiel:

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. Ereignisse in Protokollen anzeigen. Wenn Ihre Kafka-Ereignissubskription mit einem Broker, gültigen Topics und einem gültigen geheimen Zugriffsschlüssel erstellt wird und Sie über eine Kafka-Anwendung verfügen, die Nachrichten zu diesem Topic erzeugt (z. B. kafka-sender-app), können Sie Ereignisse in Protokollen für Ihre Zielanwendung Code Engine anzeigen, die Kafka-Nachrichten wie kafka-receiver-app empfängt. Wenn Sie die Empfängerapp Kafka (icr.io/codeengine/kafka-receiver) verwenden, suchen Sie in den Protokollen für die Empfängeranwendung nach Event data, um die empfangenen Nachrichten anzuzeigen.

    ibmcloud ce app logs -n kafka-receiver-app2
    

    Beispielausgabe

    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
    

    Bitte beachten Sie, dass die Protokollinformationen für Apps nur eine Stunde lang gespeichert bleiben. Weitere Informationen zum Anzeigen von Protokollen für Apps (oder Jobs) finden Sie unter Protokolle anzeigen.

Header-und Hauptteilinformationen für Kafka-Ereignisse, die an Apps übermittelt werden

Alle Ereignisse, die an Anwendungen übergeben werden, werden als HTTP-POST-Nachrichten empfangen. Ereignisse enthalten bestimmte HTTP-Header, die Ihnen dabei helfen, schnell die wichtigsten Informationen zu den Ereignissen zu ermitteln, ohne den Hauptteil (die Geschäftslogik) des Ereignisses durchsuchen zu müssen. Weitere Informationen finden Sie in der Spezifikation „ CloudEvents “.

Header für Apps

Header-Dateien für Ereignisse
Überschrift Beschreibung
ce-id Eine eindeutige Kennung für das Ereignis, sofern ein Ereignis nicht wiederholt wird; im Fall einer Wiederholung wird ihm dieselbe ID zugeordnet.
ce-source Ein URI-Verweis, der den Ursprung des Ereignisses innerhalb des Ereignisproduzenten angibt. Für Kafka-Ereignisse hat dieser Header das folgende Format: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME].
ce-specversion Die Version der CloudEvents-Spezifikation. Dieser Wert ist immer 1.0.
ce-subject Die Kafka-Partitionsnummer und -Offset. Beispiel: partition:0#1 bezieht sich auf Partition 0 und Offset 1.
ce-time Der Zeitpunkt, an dem das Ereignis generiert wurde.
ce-type Der Typ des Ereignisses. Für Kafka-Ereignisse ist dies dev.knative.kafka.event.

Beispielausgabe

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 körper für Anwendungen

Der Text des „ HTTP “-Körpers enthält die Nachricht „ Kafka “ und hat das Format, das Sie beim Erstellen oder Aktualisieren des Abonnements festlegen.

Einrichten von Code Engine zum Empfangen von Kafka-Ereignissen für einen Job

Damit „ Code Engine “ mit „ Kafka “-Ereignissen funktioniert, richten Sie über die Konsole oder die CLI ein Abonnement für „ Code Engine “- Kafka-Ereignisse ein, um eine Verbindung zu „ Kafka “-Ereignisbrokern herzustellen und auf „ Kafka “-Ereignisse zu warten. Richten Sie außerdem einen „ Code Engine “-Job (oder eine App) ein, der bzw. die als Empfänger der „ Kafka “-Ereignisse fungiert. Das „ Kafka “-Ereignisabonnement definiert die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen.

Kafka-Ereignisse für einen Job über die Konsole abonnieren

Über die Konsole können Sie ein Abonnement für „ Kafka “-Ereignisse einrichten, sodass Ereignisse an einen „ Code Engine “-Job gesendet werden.

Wenn Sie eine Ereignissubskription für einen Job erstellen, wird eine Jobausführung für jedes ausgelöste Ereignis erstellt. Diese Jobausführung enthält die Umgebungsvariablen, die sich auf den Job beziehen. Das Ereignisabonnement „ Code Engine “ ( Kafka ) stellt eine Verbindung zu Ihrem „ Kafka “-Message-Broker her und sendet Umgebungsvariablen, die sich auf den Job beziehen. Weitere Informationen zu den Umgebungsvariablen, die von Kafka übermittelt werden, finden Sie unter „ Umgebungsvariablen für Ereignisse “.

Erstellen eines Code Engine-Jobs zum Empfangen von Kafka-Ereignissen von der Konsole

  1. Erstellen Sie einen Code Engine-Job als Ereigniskonsument von Kafka-Nachrichten und empfangen Sie die Kafka-Ereignisse. Erstellen Sie beispielsweise einen Job mit dem Namen „ kafka-receiver-job “, der das Beispiel-Image „ icr.io/codeengine/codeengine “ verwendet. Dieses Bild wurde auf der Grundlage von „ codeengine.go “ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist. Dieses Beispiel erfordert keine Umgebungsvariablen.
  2. Nachdem Sie diesen Job erstellt haben, vergewissern Sie sich, dass er sich im Status ready befindet.

Wenn Sie die Konsole verwenden, muss die App oder der Job, mit der bzw. dem Sie „ Kafka “-Ereignisse empfangen, nicht unbedingt bereits vorhanden sein, bevor Sie das Abonnement für das „ Kafka “-Ereignis erstellen. Wenn die App oder der Job jedoch beim Erstellen der Ereignissubskription nicht vorhanden ist, gibt der Status der Subskription an, dass der Konsument nicht vorhanden ist. Sie müssen die App oder den Job erstellen, bevor sich das Abonnement im Bereitstatus befindet und Ereignisse über dieses Abonnement empfangen kann.

Code Engine Kafka-Ereignissubskription für einen Job über die Konsole erstellen

Das „ Kafka “-Ereignisabonnement definiert die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen.

Vorbereitende Schritte

Führen Sie die folgenden Schritte aus, um über die Konsole ein „ Kafka “-Ereignisabonnement für eine Anwendung zu erstellen.

  1. Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
  2. Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements.
  3. Klicken Sie auf der Seite 'Ereignisabonnements' auf Erstellen, um Ihr Abonnement zu erstellen.
  4. Wählen Sie auf der Seite 'Ereignissubskription erstellen' die Kachel Event Streams / Kafka aus, um den Ereignistyp anzugeben.
  5. Geben Sie für Allgemein einen Namen für die Event Streams / Kafka-Subskription an. Fahren Sie durch Klicken auf Weiter fort.
  6. Weitere Informationen zum Message Broker finden Sie unter,
    1. Geben Sie die Hosts des „ Kafka “-Message-Broker für die Nachrichtenwarteschlangen an, aus denen Nachrichten als Ereignisse über dieses Abonnement empfangen werden. Um Informationen zu den Broker-Hosts, Themen und Zugriffsberechtigungsnachweisen abzurufen, zeigen Sie die Details der Serviceberechtigungsnachweise für Ihre Serviceinstanz in der Event Streams-Konsole an. Geben Sie beispielsweise "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" für die Nachrichtenbrokerhosts für die myeventstream-key-Serviceinstanz an.
    2. Klicken Sie auf Konfigurieren, um den Zugriff auf den Nachrichtenbroker zu konfigurieren. Zur Authentifizierung von Code Engine bei Ihrer Kafka-oder Event Streams-Instanz müssen Sie einen geheimen Schlüssel für den Zugriff auf den Nachrichtenbroker bereitstellen.
      • Sie können einen neuen geheimen Schlüssel erstellen, einen vorhandenen geheimen Schlüssel auswählen oder, wenn keine Berechtigungsnachweise für den Zugriff auf die Nachrichtenbroker erforderlich sind, None wählen.
      • Klicken Sie zum Erstellen eines geheimen Schlüssels auf Erstellen. Geben Sie einen Namen für den geheimen Schlüssel und Werte für username und password an. Die Werte für username und password müssen mit den Werten in den Serviceberechtigungsnachweisen für die Instanz Kafka oder Event Streams übereinstimmen. Der Wert für username ist beispielsweise der Wert von user, der in den Details der Serviceberechtigungsnachweise in der Serviceinstanz Event Streams aufgelistet ist. Der Wert für password ist der Wert von apikey, der in den Details der Serviceberechtigungsnachweise in der Event Streams-Serviceinstanz aufgelistet ist.
      • Verwenden Sie für dieses Beispiel den vorhandenen geheimen Schlüssel kafka-subscription-secret, der zuvor erstellt wurde.
    3. Geben Sie den Namen vorhandener Themen für die Nachrichtenwarteschlangen an. Beispiel: kafka-topic1. Um Informationen zu vorhandenen Themen für Ihre Serviceinstanz abzurufen, rufen Sie Ihre Serviceinstanz in der Event Streams-Konsole auf und zeigen Sie Themen an.
    4. (Optional) Geben Sie eine Consumergruppe an. Konsumenten von Kafka-Nachrichten können in Konsumentengruppen gruppiert werden. Wenn Sie Konsumentengruppen verwenden, steuert die Topickonfiguration den Nachrichtenfluss zu Konsumenten in der Konsumentengruppe. Wenn ein Konsument einer Konsumentengruppe hinzugefügt oder aus einer Konsumentengruppe entfernt wird, kann sich der Nachrichtenfluss aus diesem Thema ändern. Diese Aktion kann dazu führen, dass vorhandene Konsumenten keine Nachrichten mehr von diesem Topic empfangen.
    5. Fahren Sie durch Klicken auf Weiter fort.
  7. Geben Sie für den Event-Consumer den Job „ Code Engine “ an, der die Ereignisse empfangen soll. Beachten Sie, dass Sie aus einer Liste definierter Jobs und Apps auswählen oder einen Namen für einen Job (oder eine App) angeben können, der bzw. die noch nicht erstellt wurde. Es ist nicht erforderlich, dass die App oder der Job vorhanden ist, wenn Sie die Ereignissubskription mit der Konsole erstellen. Wenn die Subskription erstellt wird, spiegelt der Status der Subskription jedoch wider, dass der Konsument nicht vorhanden ist. Sie müssen den Job (oder die App) erstellen, damit das Abonnement bereit ist und Ereignisse über dieses Abonnement empfangen kann. Für dieses Beispiel wählen Sie job als Komponententyp aus und verwenden Sie den Job kafka-receiver-job, der auf das Image icr.io/codeengine/codeengine verweist, als Komponente zum Empfangen von Ereignissen. Falls Ihr Job noch nicht existiert, geben Sie den Namen Ihres Jobs an und erstellen Sie ihn, nachdem Sie das „ Kafka “-Abonnement eingerichtet haben. Nur bei Anwendungen können Sie optional einen Pfad angeben. Fahren Sie durch Klicken auf Weiter fort.
  8. Überprüfen Sie abschließend die Einstellungen für Ihr „ Kafka “-Ereignisabonnement und nehmen Sie gegebenenfalls Änderungen vor. Wenn Sie bereit sind, klicken Sie auf „Erstellen“, um das „ Kafka “-Abonnement anzulegen.

Ereignisse von der Konsole an den empfangenden Job senden

Nachdem Sie nun Ihr „ Kafka “-Ereignisabonnement erstellt haben, das auf den Job „ kafka-receiver-job “ verweist, verwenden Sie die „ kafka-sender-app “, um Nachrichtenereignisse an den Empfänger-Job zu senden.

  1. Starten Sie die Protokollierung für den Empfängerjob zum Anzeigen von Jobprotokollen über die Konsole, um Ereignisse anzuzeigen.

  2. (optional) Starten Sie die Protokollierung für die Senderanwendung zum Anzeigen von Anwendungsprotokollen über die Konsole, um Informationen zu gesendeten Ereignissen anzuzeigen.

  3. Nachdem die Protokollierung gestartet wurde, rufen Sie die Anwendung kafka-sender-app mit curl auf und geben Sie die öffentliche Adresse URL der kafka-sender-app, den Namen Ihres Themas und die Anzahl der zu sendenden Nachrichten an. Sie können die öffentliche URL dieser Anwendung über die Registerkarte Domänenzuordnungen für Ihre Anwendung erhalten. Beispiel:

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

Achten Sie darauf, den Wert für 'curl' in Anführungszeichen einzuschließen, um sicherzustellen, dass er als einzelne Zeichenfolge behandelt wird.

Wenn Ihre Kafka-Subskription mit einem Broker, Themen und einem gültigen geheimen Zugriffsschlüssel erstellt wird und Sie über einen Kafka-Job verfügen, der Nachrichten zu diesem Thema generiert (z. B. kafka-sender-app), können Sie Ereignisse in Protokollen für Ihren Code Engine-Job anzeigen, der Kafka-Nachrichten empfängt, z. B. kafka-receiver-job. Wenn Sie den Empfängerjob Kafka (icr.io/codeengine/codeengine) verwenden, suchen Sie in den Protokollen für den Empfängerjob nach CE_DATA, um die empfangenen Nachrichten anzuzeigen.

Kafka-Ereignisse für einen Job über die CLI abonnieren

Sie können die Befehlszeilenschnittstelle (CLI) verwenden, um ein „ Kafka “-Ereignisabonnement einzurichten, sodass Ereignisse an einen „ Code Engine “-Job gesendet werden.

Wenn Sie eine Ereignissubskription für einen Job erstellen, wird eine Jobausführung für jedes ausgelöste Ereignis erstellt. Diese Jobausführung enthält die Umgebungsvariablen, die sich auf den Job beziehen. Das Ereignisabonnement „ Code Engine “ ( Kafka ) stellt eine Verbindung zu Ihrem „ Kafka “-Message-Broker her und sendet Umgebungsvariablen, die sich auf den Job beziehen. Weitere Informationen zu den Umgebungsvariablen, die von Kafka übermittelt werden, finden Sie unter „ Umgebungsvariablen für Ereignisse “.

Erstellen eines Code Engine-Jobs zum Empfangen von Kafka-Ereignissen über die Befehlszeilenschnittstelle

Vorbereitende Schritte

  1. Erstellen Sie einen Code Engine-Job als Ereigniskonsument von Kafka-Nachrichten und empfangen Sie die Kafka-Ereignisse. Erstellen Sie beispielsweise einen Job mit dem Namen kafka-receiver-job, der das icr.io/codeengine/codeengine-Image verwendet. Dieses Bild wurde auf der Grundlage von „ codeengine.go “ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist.

    ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine
    
  2. (Optional) Führen Sie nach der Erstellung dieses Jobs den Befehl job get aus, um Informationen über den Job anzuzeigen.

    ibmcloud ce job get -n kafka-receiver-job
    

Code Engine Kafka-Ereignissubskription für einen Job über die Befehlszeilenschnittstelle erstellen

Mit der CLI können Sie ein „ Kafka “-Ereignisabonnement erstellen, das die Beziehung zwischen dem „ Kafka “-Produzenten (Absender) und dem „ “-Konsumenten (Empfänger) von Ereignissen definiert.

  1. Erstellen Sie eine Code Engine Kafka-Ereignissubskription für Ihre Kafka-Ereignisse mit dem Befehl ibmcloud ce sub kafka create. Verwenden Sie den geheimen Schlüssel kafka-subscription-secret, den Sie zuvor erstellt haben, um auf den Nachrichtenbroker zuzugreifen. Geben Sie die Brokerinformationen basierend auf den Serviceberechtigungsinformationen für Ihre Kafka-Ressource an. In diesem Beispiel können Sie die Brokerinformationen aus der Ausgabe des Befehls ibmcloud resource service-key myeventstream-key abrufen. Beachten Sie, dass Sie für jeden Broker für Ihr Thema die Option --broker angeben müssen. Die Option --destination gibt die Ressource Code Engine an, die die Ereignisse empfängt. Wenn Sie mit einem empfangenden Job arbeiten, müssen Sie auch die Option --destination-type angeben, um anzugeben, dass die Ressource ein Job ist, da der Standardwert für diese Option app ist.

    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. Zeige die Details des Abonnements für das Ereignis „ Kafka “ an.

    ibmcloud ce sub kafka get -n mykafkasubscription-withjob
    

    Beispielausgabe

    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
    [...]
    

Ereignisse über die Befehlszeilenschnittstelle an den empfangenden Job senden

Nachdem Sie nun Ihr „ Kafka “-Ereignisabonnement erstellt haben, das auf die Anwendung „ kafka-receiver-job “ verweist, verwenden Sie die Schnittstelle „ kafka-sender-app “, um Nachrichtenereignisse an die Empfängeranwendung zu senden.

  1. Beziehen Sie die öffentliche URL der Ziel-App, kafka-sender-app, indem Sie den ibmcloud ce app get befehl die URL Ihrer Anwendung finden.

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

    Beispielausgabe

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Führen Sie die Kafka-Event-Producer-App kafka-sender-app aus, um Ereignisse an den Zieljob Code Engine zu senden. Rufen Sie die Anwendung kafka-sender-app mit curl auf und geben Sie Werte für das Topic und die Anzahl der Nachrichten an. Verwenden Sie die Ausgabe des Befehls ibmcloud ce app get befehls, um die öffentliche URL Ihrer ereigniserzeugenden Anwendung zu finden. Achten Sie darauf, den Wert für 'curl' in Anführungszeichen einzuschließen, um sicherzustellen, dass er als einzelne Zeichenfolge behandelt wird. Beispiel:

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

    Beispiel:

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. Ereignisse in Protokollen anzeigen. Wenn Ihre Kafka-Ereignissubskription mit einem Broker, Topics und einem gültigen geheimen Zugriffsschlüssel erstellt wird und Sie über eine Kafka-App verfügen, die Nachrichten zu diesem Topic erstellt (z. B. kafka-sender-app), können Sie Ereignisse in Protokollen für Ihren Zieljob Code Engine anzeigen, der Kafka-Nachrichten empfängt, z. B. kafka-receiver-job. Für jede Nachricht, die mit curl gesendet wird, wird dieselbe Anzahl von Jobausführungen durch die Kafka-Ereignisse ausgelöst. Verwenden Sie den Befehl ibmcloud ce jobrun logs, um die an Jobs gesendeten Ereignisse anzuzeigen.

    1. Mit dem Befehl ibmcloud ce jobrun list können Sie die Jobausführungen für den Job kafka-receiver-job auflisten.
        ibmcloud ce jobrun list --job kafka-receiver-job
        ```
    2. Mit dem Befehl **`ibmcloud ce jobrun logs`** können Sie die Protokolle für eine bestimmte Jobausführung abrufen.
    
    ```txt {: pre}
        ibmcloud ce jobrun logs -n kafka-receiver-job-abcde
        ```
        Beispielausgabe
    
        ```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
        ```
    Wenn Sie den Empfängerjob Kafka (`icr.io/codeengine/codeengine`) verwenden, suchen Sie in den Protokollen für den Empfängerjob nach `CE_DATA`, um die empfangenen Nachrichten anzuzeigen.
    
    Bitte beachten Sie, dass die Protokollinformationen zu den Auftragsausführungen nur eine Stunde lang gespeichert bleiben. Weitere Informationen zum Anzeigen von Protokollen für Anwendungen oder Jobs finden Sie unter [Protokolle anzeigen](/docs/codeengine?topic=codeengine-logging).
    
    
    
    

Umgebungsvariablen für „ Kafka “-Ereignisse, die an Jobs übermittelt werden

Alle Ereignisse, die an Jobs übergeben werden, werden als Umgebungsvariablen empfangen. Diese Umgebungsvariablen enthalten das Präfix „ CE_ “ und basieren auf der Spezifikation „ CloudEvents “.

Jedes Ereignis enthält einige allgemeine Umgebungsvariablen, die jedes Mal angezeigt werden, wenn das Ereignis an einen Job übergeben wird. In den tatsächlichen Variablen in den einzelnen Ereignissen können weitere Optionen enthalten sein. Weitere Informationen finden Sie unter den Attributen von „ CloudEvent “.

In der folgenden Tabelle werden die Umgebungsvariablen beschrieben, die speziell für Ereignisse im Zusammenhang mit „ Kafka “ gelten.

Umgebungsvariablen für Ereignisse
Variable Beschreibung
CE_DATA Die Daten (der Hauptteil) für das Ereignis.
CE_DOMAIN Der Domänennamensabschnitt der URL der Anwendung (und des Projekts).
CE_ID Eine eindeutige Kennung für das Ereignis, sofern ein Ereignis nicht wiederholt wird; im Fall einer Wiederholung wird ihm dieselbe ID zugeordnet.
CE_SOURCE Ein URI-Verweis, der den Ursprung des Ereignisses innerhalb des Ereignisproduzenten angibt. Für Kafka-Ereignisse hat dieser Header das folgende Format: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME].
CE_SPECVERSION Die Version der CloudEvents-Spezifikation. Dieser Wert ist immer 1.0.
CE_SUBDOMAIN Der Teil der Unterdomäne der URL, die der Anwendung zugeordnet ist (und Projekt). Wenn Sie mit Kubernetes vertraut sind, ordnet die CE_SUBDOMAIN-Zuordnung dem Kubernetes-Namespace, der Ihrem Projekt zugeordnet ist, zu.
CE_SUBJECT Die Kafka-Partitionsnummer und -Offset. Beispiel: partition:0#1 bezieht sich auf Partition 0 und Offset 1.
CE_TIME Der Zeitpunkt, an dem das Ereignis generiert wurde.
CE_TYPE Der Typ des Ereignisses. Für Kafka-Ereignisse ist dies dev.knative.kafka.event.

Beispielausgabe

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-Ereignissubskriptionen anzeigen und aktualisieren

Sie können Details zu Ihrem Abonnement für „ Kafka “-Veranstaltungen einsehen oder das Abonnement aktualisieren.

Kafka-Ereignissubskriptionen über die Konsole anzeigen und aktualisieren

  • So rufen Sie Informationen zu Ihren Veranstaltungsabonnements ab

    1. Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
    2. Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
  • So aktualisieren Sie ein Ereignisabonnement

    1. Rufen Sie Ihre Abonnementseite auf. Um zu Ihrer Abonnementseite zu navigieren, wechseln Sie zur Seite 'Ereignissubskriptionen' und klicken Sie auf den Namen der Subskription, die Sie aktualisieren wollen.
    2. Aktualisieren Sie das Abonnement. Ändern Sie beispielsweise das Topic für eine Kafka-Subskription in ein anderes Topic. Entfernen Sie auf der Registerkarte Nachrichtenbrokerdetails das vorhandene Thema aus dem Abschnitt 'Themen' und fügen Sie den Namen Ihres neuen Themas hinzu.
    3. Klicken Sie auf Speichern, um Ihre Änderungen zu speichern.

Kafka-Ereignissubskriptionen über die Befehlszeilenschnittstelle anzeigen und aktualisieren

  • Verwenden Sie den Befehl ibmcloud ce subscription kafka get, um Informationen zu Ihren Ereignissubskriptionen über die Befehlszeilenschnittstelle anzuzeigen.

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    Beispielausgabe

    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
    
  • Verwenden Sie den Befehl ibmcloud ce subscription kafka update, um eine Ereignissubskription über die Befehlszeilenschnittstelle zu aktualisieren. Im folgenden Beispiel wird der Themenname aktualisiert.

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

    Sie können den ibmcloud ce subscription kafka update Befehl verwenden, um die Werte für das Abonnement „ Kafka “ zu aktualisieren. Sie können den Wert für die Consumergruppe jedoch nicht mit diesem Befehl ändern. Wenn Sie das Abonnement aktualisieren möchten, damit es auf ein anderes Thema verweist, stellen Sie sicher, dass das Thema „ Kafka “ vorhanden ist, bevor Sie das Abonnement aktualisieren.

Kafka-Ereignissubskription löschen

Wenn Sie ein „ Kafka “-Abonnement nicht mehr benötigen, können Sie es löschen.

Wenn Sie ein Abonnement löschen, werden die Anmeldeinformationen für die Instanz des Dienstes „ Event Streams “ verwendet, um Verbrauchergruppen aus der Instanz des Dienstes „ Event Streams “ zu entfernen. Wenn die Dienstanmeldeinformationen bereits gelöscht wurden oder zum Zeitpunkt des Löschens des Abonnements ungültig sind, können die Verbrauchergruppen nicht aus der Instanz des „ Event Streams “-Dienstes entfernt werden. Ihr Antrag auf Löschung des Abonnements für das Event „ Code Engine “ ( Kafka ) schlägt fehl.

Ein „ Kafka “-Abonnement über die Konsole löschen

  1. Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
  2. Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
  3. Löschen Sie in der Liste der Abonnements dasjenige Abonnement, das Sie aus Ihrer Anwendung oder Ihrem Job entfernen möchten.

Wenn Sie eine App oder einen Job löschen, der der Subskription zugeordnet ist, wird das Abonnement nicht gelöscht. Wenn Sie die Anwendung oder den Job (oder eine andere App oder einen Job mit demselben Namen) erneut erstellen, stellt Ihre Subskription die Verbindung zur App oder zum Job wieder her.

Ein „ Kafka “-Abonnement über die CLI löschen

Sie können ein „ Kafka “-Abonnement löschen, indem Sie den ibmcloud ce subscription kafka delete Befehl ausführen.

Verwenden Sie beispielsweise den folgenden Befehl, um ein „ Kafka “-Abonnement mit dem Namen „ mykafkasubscription “ zu löschen:

ibmcloud ce subscription kafka delete --name mykafkasubscription

Wenn Sie eine App oder einen Job löschen, der der Subskription zugeordnet ist, wird das Abonnement nicht gelöscht. Stattdessen wechselt er in den Bereitstatus von false, da die Subskription von der Verfügbarkeit der App oder des Jobs abhängt. Wenn Sie die Anwendung oder den Job (oder eine andere App oder einen Job mit demselben Namen) erneut erstellen, wird Ihre Subskription erneut verbunden und der Bereitstatus ist true.

Zusätzliche Ereignisattribute definieren

Wenn Sie ein Abonnement erstellen, können Sie zusätzliche CloudEvent-Attribute definieren, die in alle generierten Ereignisse einbezogen werden sollen. Diese Attribute ähneln allen anderen CloudEvent-Attributen bei der Zustellung des Ereignisses. Wenn Sie den Namen eines vorhandenen CloudEvent-Attributs angeben, wird der ursprüngliche Wert, der im Ereignis enthalten war, überschrieben.

Um zusätzliche Attribute zu definieren, verwenden Sie die Optionen „ --extension “ mit dem ibmcloud ce subscription kafka create CLI-Befehl.

Weitere Informationen finden Sie unter Kann ich andere CloudEvents-Spezifikationen verwenden?