S'abonner aux événements d' Kafka
Grâce à ce tutoriel, vous apprendrez à vous abonner à des événements d' Kafka s à l'aide de l'interface de ligne de commande (CLI) d' IBM Cloud® Code Engine.
Souvent, dans les environnements distribués, vous avez besoin que vos applications ou vos travaux réagissent aux messages (événements) générés à partir d'autres composants, qui sont généralement appelés des producteurs d'événements. Avec Code Engine, vos applications ou vos travaux peuvent recevoir des événements d'intérêt grâce à un abonnement à des producteurs d'événements. Les informations relatives aux événements sont reçues sous forme de demandes HTTP POST pour les applications et sous forme de variables d'environnement pour les travaux.
Le producteur d'événement Kafka recherche les nouveaux messages à afficher dans une instance Kafka. Lorsque vous créez un abonnement Code Engine Kafka pour un ensemble de rubriques, votre application ou votre travail reçoit un événement distinct pour chaque nouveau message qui apparaît dans l'une des rubriques.
Bien que vous puissiez utiliser n'importe quelle instance d' Kafka, les exemples de ce tutoriel utilisent le service IBM® Event Streams for IBM Cloud®. Event Streams est un service de streaming d'événements IBM destiné aux événements Kafka. Pour plus d'informations sur ce service, consultez la documentation de Event Streams.
Avant de commencer
- Configurez votre environnement d'interface de ligne de commande Code Engine.
- Configurez votre interface de ligne de commande Event Streams.
- Créez et utilisez un projet.
Tous les utilisateurs Code Engine doivent avoir un compte de paiement à la carte. Les tutoriels peuvent entraîner des coûts. Utilisez l'estimateur de coût pour générer une estimation du coût en fonction de l'utilisation envisagée. Pour plus d'informations, voir Tarification Code Engine.
Configuration du générateur d'événements « Kafka »
Vous pouvez configurer votre producteur de messages « Kafka » pour qu'il envoie des messages aux abonnements aux événements « Code Engine » et « Kafka ». Utilisez votre abonnement aux événements « Code Engine » ( Kafka ) pour déclencher des applications ou des tâches lorsqu'un message « Kafka » est reçu.
Pour commencer, créez une instance de service Event Streams pour votre service de diffusion en continu d'événements. Alors que vous pouvez utiliser la console ou l'interface de ligne de commande, les étapes suivantes décrivent comment configurer le fournisseur d'événements Event Streams avec l'interface de ligne de commande.
-
Créez une instance de service pour Event Streams. Le nom du service CLI Event Streams est
messagehub. Pour cet exemple, créez une instance de service Event Streams nomméemyeventstream.ibmcloud resource service-instance-create myeventstream messagehub lite us-south -
Créez une clé de service pour fournir des données d'identification à votre instance de service.
ibmcloud resource service-key-create myeventstream-key Manager --instance-name myeventstreamExemple de sortie
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: tokenNotez les valeurs de
user,passwordetkafka-brokers_saslpour votre clé de service. Vous avez besoin de ces informations lorsque vous configurez votre abonnement Code Engine Kafka. Les valeurs depasswordetapikeysont identiques dans la clé de service de votre instance de service Event Streams. Vous pouvez également utiliser la commandeibmcloud resource service-key myeventstream-keypour extraire les informations de clé de service. -
Initialisez le plug-in Event Streams relatif à votre instance de service Event Streams.
ibmcloud es init --instance-name myeventstream -
Créer un sujet « Event Streams ».
ibmcloud es topic-create kafka-topic1
Configuration d'un exemple d'application Code Engine pour produire des messages Kafka
Pour ce tutoriel, configurez une application Code Engine pour agir en tant que producteur d'événements des messages Kafka. L'objectif de cette application kafka-sender-app est de se connecter à votre instance Event Streams et de
produire (envoyer) des messages Kafka à un destinataire des messages (consommateurKafka ). Cette application qui génère des événements pour les messages Kafka utilise l'Code Engine Kafka Kafka pour envoyer des messages Kafka. Cet exemple d'image d'expéditeur requiert la variable d'environnement BROKERS et un secret qui inclut les données d'identification password.
-
Créez un secret avec les données d'identification requises par les exemples Code Engine Kafka. Par exemple, créez le secret
kafka-subscription-secretpour qu'il contienne les données d'identification requises à la fois pour l'exemple d'application d'expéditeur Kafka et pour l'abonnement d'événement Kafka, qui utilise l'exemple de récepteur Kafka. Ces données d'identification sont requises pour l'exemple d'application d'expéditeur Kafka et l'abonnement à l'événement Kafka Code Engine pour communiquer avec l'instance de service pour Event Streams. Bien qu'il ne soit pas nécessaire de créer ce secret avant de créer l'application émettrice Kafka et l'abonnement à l'événement, cette action simplifie les étapes requises.Pour créer le secret
kafka-subscription-secret, ajoutez une variable d'environnement littérale pourpasswordetusername. Pour plus d'informations, voir Création d'un secret avec l'interface de ligne de commande.- Spécifiez la clé
usernameavec la valeuruserrépertoriée dans les détails des données d'identification du service dans l'instance de service Event Streams. Pour l'instance de service Event Streams, cette valeur esttoken. Cette clé est requise pour l'authentification entre l'abonnement à l'événement Code Engine Kafka et le courtier de messages Kafka. - Spécifiez la clé
passwordavec la valeurapikeyrépertoriée dans les détails des données d'identification du service dans l'instance de service Event Streams. Cette clé est requise pour l'exemple de l'expéditeur et pour activer les communications entre l'abonnement à l'événement Kafka Code Engine et le courtier de messages Kafka.
ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=<value_of_apikey> --from-literal username=<value_of_user> ``` Par exemple : ```txt {: pre} ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh --from-literal username=token ``` - Spécifiez la clé
-
Créez l'
kafka-sender-appe en indiquant les informations suivantes.- Spécifiez l'option
--imagepour référencer l'image de conteneuricr.io/codeengine/kafka-sender. Cette image est générée à partir desender.go, qui est disponible dans Exemples pour le référentiel IBM Cloud Code Engine GitHub. Cet exemple d'application d'expéditeur requiert les données d'identificationpasswordqui sont stockées dans votrekafka-subscription-secretet requiert la variable d'environnementBROKERS. - Spécifiez l'option
--env-from-secretpour référencer le secret complet,kafka-subscription-secret, qui contient les données d'identificationpassword. - Spécifiez l'option
--envpour ajouter une variable d'environnement littérale,BROKERS, et indiquez le nom de l'un des hôtes de courtier répertoriés dans les détails des données d'identification du service dans l'instance de service Event Streams. Toutefois, si vous souhaitez spécifier plusieurs noms d'hôte de courtier, utilisez le format--env BROKERS-broker1,broker2,broker3. - (facultatif) Spécifiez l'option «
--min-scale=1» afin que l'application dispose toujours d'une instance en cours d'exécution et ne soit pas réduite à zéro. Le fait de configurer l'application afin de toujours avoir une instance en cours d'exécution est utile lorsque vous affichez les journaux. Si vous travaillez dans un environnement de production, prenez en compte le coût de la conservation d'une instance en cours d'exécution de votre application ou si vous souhaitez que Code Engine soit automatiquement réduit à zéro. Par défaut, l'application est mise à l'échelle à zéro lorsqu'elle n'est pas utilisée.
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 ``` - Spécifiez l'option
-
Après avoir déployé cette application, exécutez la commande
app getpour confirmer que l'application a le statutready.ibmcloud ce app get -n kafka-sender-app
Vous avez créé l'application kafka-sender-app pour générer des messages Kafka pour les abonnements à des événements Code Engine et vous avez créé le secret kafka-subscription-secret qui contient les données d'identification
requises.
Configuration d'un abonnement Code Engine Kafka
Pour que Code Engine fonctionne avec les événements Kafka, configurez un abonnement aux événements Code Engine Kafka afin de vous connecter aux courtiers d'événements Kafka et d'écouter les événements Kafka. Configurez également une application « Code Engine » qui servira de récepteur pour les événements « Kafka ». L'abonnement aux événements « Kafka » définit la relation entre le producteur (expéditeur) et le consommateur (destinataire) d'événements Kafka.
L'abonnement à l'événement « Code Engine » ( Kafka ) se connecte à votre courtier de messages Kafka et envoie des requêtes POST à l'adresse HTTP pour chaque message entrant provenant de Kafka à l'application réceptrice. Pour plus d'informations sur les données incluses dans les événements « Kafka », consultez la section « En-têtes et corps des messages » de HTTP concernant les événements transmis aux applications.
-
Créez une application Code Engine pour agir en tant que consommateur d'événements des messages Kafka et recevoir les événements Kafka. Par exemple, créez une application appelée
kafka-receiver-appqui utilise l'imageicr.io/codeengine/kafka-receiver. Cette image est générée à partir dereceiver.go, qui est disponible dans Exemples pour le référentiel IBM Cloud Code Engine GitHub. Cet exemple ne nécessite aucune variable d'environnement. Vous pouvez, si vous le souhaitez, spécifier l'option «--min-scale=1» afin que l'application dispose toujours d'une instance en cours d'exécution et que son nombre d'instances ne tombe jamais à zéro. Le fait de configurer l'application afin de toujours avoir une instance en cours d'exécution est utile lorsque vous affichez les journaux. Si vous travaillez dans un environnement de production, prenez en compte le coût de la conservation d'une instance en cours d'exécution de votre application ou si vous souhaitez que Code Engine soit automatiquement réduit à zéro. Par défaut, l'application est mise à l'échelle à zéro lorsqu'elle n'est pas utilisée.ibmcloud ce app create -n kafka-receiver-app --image icr.io/codeengine/kafka-receiver --min-scale 1Par défaut, les événements sont acheminés vers l'URL racine de l'application de destination. Vous pouvez envoyer des événements vers une autre destination dans l'application à l'aide de l'option
--path. Par exemple, si votre abonnement indique--path /event, l'événement est envoyé àhttps://<base application URL>/events. -
Après avoir déployé cette application, exécutez la commande
app getpour confirmer que l'application a le statutready.ibmcloud ce app get -n kafka-receiver-app -
Créez un abonnement d'événement Code Engine Kafka pour vos événements Kafka à l'aide de la commande
ibmcloud ce sub kafka create. Utilisez le secretkafka-subscription-secretque vous avez créé précédemment pour accéder au courtier de messages. Spécifiez les informations de courtier en fonction des informations de données d'identification du service pour votre ressource Kafka. Pour cet exemple, vous pouvez obtenir les informations de courtier à partir de la sortie de la commandeibmcloud resource service-key myeventstream-key. Notez que vous devez spécifier une option--brokerpour chaque courtier de votre rubrique. L'option--destinationspécifie la ressource Code Engine qui reçoit les événements.ibmcloud ce sub kafka create --name mykafkasubscription --destination kafka-receiver-app --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 -
Afficher les détails de l'abonnement à l'événement « Kafka ».
ibmcloud ce sub kafka get -n mykafkasubscriptionExemple de sortie
Getting Kafka event subscription 'mykafkasubscription'... OK Name: mykafkasubscription [...] Destination Type: app Destination: kafka-receiver-app 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
Test de votre abonnement
Maintenant que votre abonnement à l'événement « Kafka », qui fait référence à l'application « kafka-receiver-app », est créé, utilisez l'interface « kafka-sender-app » pour envoyer des événements de message à l'application
réceptrice.
-
Récupérez l' URL publique de l'application de destination,
kafka-sender-app, à l'aide de laibmcloud ce app getURL commande avec l'option «--output url» pour trouver l' de votre application.ibmcloud ce app get -n kafka-sender-app --output urlExemple de sortie
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
Exécutez l'application de fournisseur d'événements Kafka,
kafka-sender-apppour envoyer des événements à l'application Code Engine de destination. Appelez l'applicationkafka-sender-appaveccurlet spécifiez des valeurs pour la rubrique et le nombre de messages. Utilisez la sortie de laibmcloud ce app getcommande pour trouver l' URL publique de votre application. Veillez à encapsuler la valeur dans des guillemets pour vous assurer qu'elle est traitée comme une chaîne unique. Par exemple :curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"Par exemple :
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
Afficher les événements dans les journaux. Lorsque votre abonnement à des événements Kafka est créé avec un courtier, des rubriques et un secret d'accès valides, et que vous disposez d'une application Kafka qui génère des messages sur cette rubrique (par exemple,
kafka-sender-app), vous pouvez afficher les événements dans les journaux de votre application Code Engine de destination qui reçoit des messages Kafka, tels quekafka-receiver-app. Lorsque vous utilisez l'application de récepteur Kafka (icr.io/codeengine/kafka-receiver), recherchezEvent datadans les journaux de l'application de récepteur pour voir les messages reçus.ibmcloud ce app logs -n kafka-receiver-appExemple de sortie
Getting logs for all instances of application 'kafka-receiver-app'... OK kafka-receiver-app-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: 1Notez que les informations de journalisation relatives aux applications ne sont conservées que pendant une heure. Pour plus d'informations sur l'affichage des journaux pour les applications (ou les travaux), voir Affichage des journaux.
Mise à jour de votre abonnement
Pour mettre à jour un abonnement à des événements à l'aide de l'interface de ligne de commande, utilisez la commande ibmcloud ce subscription kafka update.
L'exemple suivant met à jour le nom de la rubrique.
ibmcloud ce sub kafka update -n mykafkasubscription --topic kafka-topic2
Vous pouvez utiliser la ibmcloud ce subscription kafka update commande suivante pour mettre à jour les valeurs de l'abonnement «
Kafka ». Toutefois, vous ne pouvez pas modifier la valeur du groupe de consommateurs à l'aide de cette commande. Si vous souhaitez mettre à jour l'abonnement pour qu'il fasse référence à un autre sujet, assurez-vous que le sujet « Kafka »
existe bien avant de procéder à la mise à jour de l'abonnement.
Tutoriel sur l'abonnement à « Clean up for Kafka »
Prêt à supprimer votre abonnement Kafka, les applications d'envoi et de réception et le secret? Vous pouvez utiliser les commandes ibmcloud ce app delete,
ibmcloud ce sub kafka delete et ibmcloud ce sub kafka delete.
Vous pouvez, si vous le souhaitez, utiliser l'option « -f » pour forcer la suppression du composant sans confirmation.
Lorsque vous supprimez l'abonnement « Kafka », cette suppression n'entraîne pas la suppression de l'application à laquelle cet abonnement fait référence.
Pour retirer votre abonnement, entrez :
ibmcloud ce sub kafka delete --name mykafkasubscription -f
Pour supprimer votre application de réception de messages Kafka,
ibmcloud ce app delete --name kafka-receiver-app -f
De même, vous pouvez supprimer le kafka-sender-app.
ibmcloud ce app delete --name kafka-sender-app -f
Pour supprimer le kafka-subscription-secret,
ibmcloud ce secret delete --name kafka-subscription-secret -f
Vous êtes prêt à supprimer votre instance de service Event Streams ? L'option --recursive permet de supprimer toutes les ressources de l'instance de service, qui inclut la clé de service associée.
ibmcloud resource service-instance-delete myeventstream --recursive -f
Etapes suivantes
Pour plus d'informations sur l'utilisation des abonnements aux événements Kafka, voir Utilisation du fournisseur d'événements Kafka.
Vous recherchez d'autres exemples de code ? Découvrez le site Exemples pour le dépôt « IBM Cloud Code Engine GitHub ».