Utilizzo del produttore eventi Kafka

Un abbonamento di tipo " Code Engine " ( Kafka ) monitora la comparsa di nuovi messaggi in un'istanza di " Kafka ". Quando crei una sottoscrizione per una serie di argomenti, la tua applicazione o lavoro riceve un evento separato per ogni nuovo messaggio visualizzato in uno degli argomenti. È possibile creare al massimo 100 abbonamenti a “ Kafka ” per progetto.

Sebbene sia possibile utilizzare qualsiasi istanza di Kafka, gli esempi riportati in questo argomento utilizzano il servizio IBM® Event Streams for IBM Cloud®. Event Streams è un servizio di streaming di eventi IBM per eventi Kafka. Per ulteriori informazioni su questo servizio, consultare la documentazione su Event Streams.

Configurazione del produttore eventi Kafka

È possibile configurare il proprio generatore di messaggi " Kafka " in modo che invii messaggi alle sottoscrizioni agli eventi " Code Engine " e " Kafka ". Utilizza la sottoscrizione all'evento Code Engine Kafka per attivare applicazioni o processi quando viene ricevuto un messaggio Kafka.

Per iniziare, crea un'istanza del servizio Event Streams per il tuo servizio Event Streaming. Mentre puoi utilizzare la console o la CLI, i seguenti passi descrivono come configurare il produttore di eventi Event Streams con la CLI.

Impostazione dell'ambiente CLI Event Streams

  1. Scarica e installa la CLIIBM Cloud. Accedi alla CLI IBM Cloud.

    ibmcloud login
    
  2. Scarica e installa la CLI Code Engine.

    ibmcloud plugin install code-engine -f
    
  3. Per utilizzare il servizio Event Streams per creare l'istanza Kafka, scarica e installa la CLI Event Streams.

    ibmcloud plugin install event-streams -f
    
  4. Accedi al tuo account IBM Cloud e specifica un gruppo di risorse. Specifica un gruppo di risorse immettendo il seguente comando: Per ottenere un elenco dei propri gruppi di risorse, eseguire il comando ibmcloud resource groups .

    ibmcloud target -g <resource_group>
    

Configurazione dell'istanza di Kafka

  1. Crea un'istanza del servizio per Event Streams. Il nome del servizio CLI Event Streams è messagehub. Per questo esempio, crea un'istanza del servizio Event Streams denominata myeventstream.

    ibmcloud resource service-instance-create myeventstream messagehub lite us-south
    
  2. Crea una chiave del servizio per fornire le credenziali alla tua istanza del servizio.

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

    Output di esempio

    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
    

    Prendi nota dei valori per user, password e kafka-brokers_sasl per la chiave del servizio. Hai bisogno di queste informazioni quando configuri la tua sottoscrizione Code Engine Kafka. I valori per password e apikey sono gli stessi nella chiave del servizio per la tua istanza del servizio Event Streams. Puoi anche utilizzare il comando ibmcloud resource service-key myeventstream-key per recuperare le informazioni sulla chiave di servizio.

  3. Inizializza il plug-in Event Streams relativo all'istanza del servizio Event Streams.

    ibmcloud es init --instance-name myeventstream
    
  4. Crea un argomento Event Streams.

    ibmcloud es topic-create kafka-topic1
    

Configurazione di un'applicazione di esempio Code Engine per produrre messaggi Kafka

Per questo scenario, utilizziamo un'applicazione Code Engine per agire come un produttore di eventi di messaggi Kafka. Lo scopo di questa applicazione è connettersi alla tua istanza Event Streams e inviare messaggi Kafka. Questa applicazione utilizza Applicazione di esempio mittente Code Engine Kafka per inviare messaggi Kafka. Questa immagine mittente di esempio richiede la variabile di ambiente BROKERS e un segreto che include le credenziali password. È possibile creare questa applicazione dalla console o tramite la CLI.

Assicurati di specificare l'intestazione Content-Type quando invii messaggi Kafka all'indirizzo Event Streams. Specificare questa intestazione in modo che il consumer possa ricevere messaggi con il tipo di contenuto previsto; ad esempio, application/json.

Creazione di un segreto con credenziali richieste dagli esempi Kafka

Prima di creare l'applicazione Code Engine per inviare messaggi Kafka, crea un segreto Code Engine che contenga le credenziali richieste.

Prima di iniziare

Per semplificare questo scenario, creare un unico segreto, kafka-subscription-secret, che contenga le credenziali necessarie sia per l'app di esempio del mittente Kafka sia per la sottoscrizione all'evento Kafka, che utilizza l'app di esempio del destinatario Kafka. Queste credenziali sono necessarie affinché l'app mittente di esempio Kafka e l'abbonamento all'evento Code Engine Kafka possano comunicare con l'istanza del servizio disponibile all'indirizzo Event Streams. Sebbene non sia necessario creare questo segreto prima di creare l'app mittente Kafka e la sottoscrizione all'evento, questa operazione semplifica i passaggi richiesti.

Creazione di un segreto con le credenziali richieste dagli esempi Kafka dalla console

Per creare il segreto kafka-subscription-secret dalla console, vai a Secrets and configmaps e fai clic su Create e seleziona il segreto che vuoi creare. Per ulteriori informazioni, vedi Crea un segreto dalla console.

  • Specifica la chiave username con il valore di user elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Per l'istanza del servizio Event Streams, questo valore è token. Questa chiave è obbligatoria per l'autenticazione tra la sottoscrizione evento Kafka Code Engine e il broker dei messaggi Kafka.
  • Specifica la chiave password con il valore di apikey elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Questa chiave è richiesta per l'esempio del mittente e per consentire le comunicazioni tra la sottoscrizione evento Code Engine Kafka e il broker dei messaggi Kafka.
Creazione di un segreto con le credenziali richieste dagli esempi Kafka con la CLI

Per creare il segreto kafka-subscription-secret con la CLI, aggiungi una variabile di ambiente letterale per password e username. Per ulteriori informazioni, vedi Crea un segreto con la CLI.

  • Specifica la chiave username con il valore di user elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Per l'istanza del servizio Event Streams, questo valore è token. Questa chiave è obbligatoria per l'autenticazione tra la sottoscrizione evento Kafka Code Engine e il broker dei messaggi Kafka.

  • Specifica la chiave password con il valore di apikey elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Questa chiave è richiesta per l'esempio del mittente e per consentire le comunicazioni tra la sottoscrizione evento Code Engine Kafka e il broker dei messaggi Kafka.

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

    Ad esempio,

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

Creazione di un'applicazione Code Engine per inviare eventi

Crea un'applicazione " Code Engine " per connetterti alla tua istanza di Event Streams e generare (inviare) messaggi Kafka a un destinatario di messaggi Kafka (consumer Kafka ).

Creazione di un'applicazione Code Engine per inviare eventi dalla console

Per creare l'applicazione kafka-sender-app dalla console, completare la seguente procedura.

  1. Creare un'applicazione Code Engine chiamato kafka-sender-app con le seguenti informazioni.

    1. Fai riferimento all'immagine del contenitore icr.io/codeengine/kafka-sender per questa applicazione. Questa immagine viene creata da sender.go, che è disponibile dal repository Esempi per IBM Cloud Code Engine GitHub. Questa applicazione mittente di esempio richiede valori per password e BROKERS.
    2. Nella sezione Variabili di ambiente (facoltativo), aggiungere le seguenti variabili di ambiente.
      1. Aggiungere una variabile di ambiente letterale, BROKERS. Per il valore di questa chiave, specifica uno o più degli host broker elencati nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams.
      2. Aggiungi un'altra variabile di ambiente a fai riferimento al segreto completo, kafka-subscription-secret. Questo segreto contiene le credenziali per password.
    3. (facoltativo) Nella sezione Risorse & ridimensionamento, specifica 1 per il numero minimo di istanze in modo che l'applicazione abbia sempre un'istanza in esecuzione e non venga ridimensionata a zero. La configurazione dell'applicazione per avere sempre un'istanza in esecuzione è utile quando visualizzi i log. Se sei in esecuzione in un ambiente di produzione, considera il costo di mantenere un'istanza in esecuzione della tua applicazione o se vuoi che Code Engine venga ridimensionato automaticamente a zero. Per impostazione predefinita, l'app viene ridimensionata a zero quando non è in uso.
    4. Fai clic su Crea per creare e distribuire la tua applicazione.
  2. Confermare che questa app si trova nello stato ready.

Creazione di un'applicazione Code Engine per inviare eventi con la CLI

Per creare l'applicazione kafka-sender-app con la CLI, utilizza i seguenti comandi.

  1. Creare un'applicazione Code Engine chiamato kafka-sender-app con le seguenti informazioni.

    • Specifica l'opzione --image per fare riferimento all'immagine del container icr.io/codeengine/kafka-sender. Questa immagine viene creata da sender.go, che è disponibile dal repository Esempi per IBM Cloud Code Engine GitHub. Questa applicazione mittente di esempio richiede le credenziali password memorizzate nel tuo kafka-subscription-secret e richiede la variabile di ambiente BROKERS.
    • Specificare l'opzione --env-from-secret per fare riferimento al segreto completo, kafka-subscription-secret, che contiene le credenziali password.
    • Specifica l'opzione --env per aggiungere una variabile di ambiente letterale, BROKERS, e fornire il nome di uno degli host del broker elencati nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Tuttavia, se si desidera specificare più di un nome host del broker, utilizzare il formato --env BROKERS-broker1,broker2,broker3.
    • (Facoltativo) Specifica l'opzione --min-scale=1 in modo che l'applicazione abbia sempre un'istanza in esecuzione e non venga scalata a zero. La configurazione dell'applicazione per avere sempre un'istanza in esecuzione è utile quando visualizzi i log. Se sei in esecuzione in un ambiente di produzione, considera il costo di mantenere un'istanza in esecuzione della tua applicazione o se vuoi che Code Engine venga ridimensionato automaticamente a zero. Per impostazione predefinita, l'app viene ridimensionata a zero quando non è in uso.
    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
    

Configurazione di Code Engine per ricevere gli eventi Kafka per un'applicazione

Affinché Code Engine funzioni con gli eventi Kafka, utilizzare la console o la CLI per configurare un abbonamento agli eventi Code Engine Kafka, in modo da connettersi ai broker di eventi Kafka e ascoltare gli eventi Kafka. Inoltre, configura un'app (o un processo) " Code Engine " affinché funga da destinatario degli eventi " Kafka ". L'abbonamento agli eventi " Kafka " definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi.

La sottoscrizione agli eventi Code Engine Kafka si connette al broker di messaggi Kafka e invia richieste di posta HTTP per ogni messaggio Kafka in arrivo all'applicazione ricevente. Per ulteriori informazioni, vedere HTTP intestazioni e informazioni sul corpo degli eventi.

Sottoscrizione degli eventi Kafka per un'applicazione dalla console

È possibile utilizzare la console per configurare un abbonamento agli eventi di Kafka in modo che gli eventi vengano inviati a un'applicazione Code Engine.

Creazione di una applicazione Code Engine per ricevere eventi Kafka dalla console

  1. Crea un'applicazione Code Engine per agire come un consumatore di eventi di messaggi Kafka e ricevere gli eventi Kafka. Ad esempio, crea un'applicazione denominata kafka-receiver-app che utilizza l'immagine icr.io/codeengine/kafka-receiver. Questa immagine viene creata da receiver.go, che è disponibile dal repository Esempi per IBM Cloud Code Engine GitHub. Questo esempio non richiede alcuna variabile di ambiente.
  2. Dopo aver distribuito questa applicazione, conferma che si trova nello stato ready.

Quando si utilizza la console, non è necessario che l'app o il processo utilizzato per ricevere gli eventi " Kafka " esista già prima di creare l'abbonamento all'evento " Kafka ". Tuttavia, se l'app o il lavoro non esiste quando si crea la sottoscrizione evento, lo stato della sottoscrizione indica che l'utente non esiste. Devi creare l'applicazione o il lavoro prima che la sottoscrizione sia in stato pronto e possa ricevere gli eventi tramite questa sottoscrizione.

Creazione di una sottoscrizione evento Code Engine Kafka per un'applicazione dalla console

L'abbonamento agli eventi " Kafka " definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi.

Prima di iniziare

Completa la seguente procedura per creare una sottoscrizione evento Kafka per un'applicazione dalla console.

  1. Dalla pagina ProgettiCode Engine, vai al tuo progetto.
  2. Dalla pagina Panoramica, fare clic su Sottoscrizioni eventi.
  3. Dalla pagina Sottoscrizioni evento, fare clic su Crea per creare la sottoscrizione.
  4. Dalla pagina Crea una sottoscrizione evento, selezionare il tile Event Streams / Kafka per specificare il tipo di evento.
  5. Per Generale, fornire un nome per la sottoscrizione Event Streams / Kafka. Fai clic su " Avanti " per continuare.
  6. Per ulteriori informazioni su Message Broker,
    1. Specificare gli host del broker di messaggi Kafka per le code di messaggi da cui vengono ricevuti i messaggi come eventi tramite questa sottoscrizione. Per ottenere informazioni su host, argomenti e credenziali di accesso del broker, visualizza i dettagli della credenziale del servizio per la tua istanza del servizio nella console Event Streams. Ad esempio, specificare "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" per gli host del broker dei messaggi per l'istanza del servizio myeventstream-key. Puoi trovare i broker per l'istanza del servizio nel campo Event Streams nel campo Kafka_brokers_sasl.
    2. Fare clic su Configura per configurare l'accesso al broker dei messaggi. Per autenticarti da Code Engine alla tua istanza Kafka o Event Streams, devi fornire un segreto di accesso del broker dei messaggi.
      • È possibile creare un nuovo segreto, scegliere un segreto esistente oppure, se le credenziali non sono richieste per accedere ai broker dei messaggi, scegliere None.
      • Per creare un segreto, fare clic su Crea. Fornire un nome per il segreto e i valori per username e password. I valori per username e password devono corrispondere ai valori nelle credenziali del servizio per l'istanza Kafka o Event Streams. Ad esempio, il valore per username è il valore di user elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Il valore per password è quello di apikey elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams.
      • Per questo esempio, utilizzare il segreto kafka-subscription-secret esistente precedentemente creato.
    3. Specificare il nome degli argomenti esistenti per le code messaggi. Ad esempio, kafka-topic1. Per ottenere informazioni sugli argomenti esistenti per la tua istanza del servizio, vai alla tua istanza del servizio nella console Event Streams e visualizza Argomenti.
    4. (Facoltativo) Specificare un gruppo di consumatori. I consumer dei messaggi Kafka possono essere raggruppati in gruppi consumer. Se si utilizzano gruppi di consumatori, la configurazione dell'argomento controlla il flusso di messaggi per i consumatori nel gruppo di consumatori. Ogni volta che un consumer viene aggiunto o rimosso da un gruppo consumer, il flusso di messaggi da tale argomento potrebbe cambiare. Questa azione può far sì che i consumer esistenti non ricevano più messaggi da tale argomento.
    5. Fai clic su " Avanti " per proseguire.
  7. Per Event consumer, specifica l'applicazione Code Engine per ricevere eventi. Nota che puoi scegliere da un elenco di applicazioni e lavori definiti oppure puoi fornire un nome per un'applicazione (o lavoro) che non è ancora stata creata. Non è necessario che l'app o il lavoro esistano quando crei la sottoscrizione evento con la console. Tuttavia, quando la sottoscrizione viene creata, lo stato della sottoscrizione indica che l'utente non esiste. Devi creare l'applicazione o il lavoro prima che la sottoscrizione sia in stato pronto e possa ricevere gli eventi tramite questa sottoscrizione. Per questo esempio, utilizza l'applicazione kafka-receiver-app che fa riferimento all'immagine icr.io/codeengine/kafka-receiver. Se la tua applicazione non esiste, fornisci il nome della tua applicazione e crea la tua applicazione dopo aver creato la sottoscrizione Kafka. Solo per le applicazioni, è possibile specificare facoltativamente un percorso. Per impostazione predefinita, gli eventi vengono instradati al sito URL dell'applicazione di destinazione. È possibile inviare eventi a una destinazione diversa all'interno dell'app specificando un percorso. Ad esempio, se il tuo percorso di sottoscrizione specifica /events, gli eventi vengono inviati a https://<base application URL>/events. Fai clic su " Avanti " per continuare.
  8. Per Riepilogo, esamina le impostazioni per la tua sottoscrizione evento Kafka e apporta le modifiche, se necessario. Quando pronto, fai clic su Crea per creare la sottoscrizione Kafka.

Invio di eventi all'applicazione ricevente dalla console

Ora che è stato creato l'abbonamento all'evento Kafka, che fa riferimento all'applicazione kafka-receiver-app, utilizza l' kafka-sender-app per inviare eventi di messaggio all'applicazione ricevente.

  1. Avviare la registrazione per l'applicazione ricevente per visualizzare i log dell'applicazione dalla console per visualizzare eventi.

  2. (facoltativo) Avviare la registrazione per l'applicazione mittente per visualizzare i log dell'applicazione dalla console per vedere le informazioni sugli eventi inviati.

  3. Dopo aver avviato la registrazione, chiamare l'applicazione kafka-sender-app con curl e specificare l'indirizzo URL pubblico di kafka-sender-app, il nome dell'argomento e il numero di messaggi da inviare. È possibile ottenere il sito URL pubblico di questa applicazione dalla scheda Domain mappings della propria applicazione. Ad esempio,

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

Assicurati di racchiudere il valore tra virgolette per assicurarti che sia trattato come una singola stringa.

Sottoscrizione degli eventi Kafka per un'applicazione con la CLI

È possibile utilizzare la CLI per configurare un abbonamento agli eventi di Kafka in modo che gli eventi vengano inviati a un'applicazione Code Engine.

Gli eventi vengono inviati alle applicazioni sotto forma di richieste POST all' HTTP. Per ulteriori informazioni sui dati inclusi negli eventi di tipo “ Kafka ”, consultare le intestazioni “ HTTP ” e le informazioni del corpo relative agli eventi. Se il tuo evento viene inviato a un processo Code Engine, il processo riceve gli eventi sotto forma di variabili d'ambiente. Per ulteriori informazioni sulle variabili d'ambiente relative agli abbonamenti a " Kafka ", consultare la sezione " Variabili d'ambiente per gli eventi ".

Creazione di un'applicazione Code Engine per ricevere gli eventi Kafka con la CLI

Prima di iniziare

  1. Crea un'applicazione Code Engine per agire come un consumatore di eventi di messaggi Kafka e ricevere gli eventi Kafka. Ad esempio, crea un'applicazione denominata kafka-receiver-app2 che utilizza l'immagine icr.io/codeengine/kafka-receiver. Questa immagine viene creata da receiver.go, che è disponibile dal repository Esempi per IBM Cloud Code Engine GitHub. Questo esempio non richiede alcuna variabile di ambiente. Facoltativamente, puoi specificare l'opzione --min-scale=1, in modo che l'app abbia sempre un'istanza in esecuzione e non venga ridimensionata a zero. La configurazione dell'applicazione per avere sempre un'istanza in esecuzione è utile quando visualizzi i log. Se sei in esecuzione in un ambiente di produzione, considera il costo di mantenere un'istanza in esecuzione della tua applicazione o se vuoi che Code Engine venga ridimensionato automaticamente a zero. Per impostazione predefinita, l'app viene ridimensionata a zero quando non è in uso.

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

    Per impostazione predefinita, gli eventi vengono instradati al sito URL dell'applicazione di destinazione. Puoi inviare eventi a una destinazione differente all'interno dell'applicazione utilizzando l'opzione --path. Ad esempio, se la tua sottoscrizione specifica --path /event, l'evento viene inviato a https://<base application URL>/events.

  2. Dopo che hai distribuito questa applicazione, esegui il comando app get per confermare che l'applicazione si trova nello stato ready.

    ibmcloud ce app get -n kafka-receiver-app2
    

Creazione di una sottoscrizione evento Kafka Code Engine per un'applicazione con la CLI

È possibile creare un abbonamento agli eventi " Kafka ", che definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi, tramite la CLI.

  1. Crea una sottoscrizione evento Kafka Code Engine per i tuoi eventi Kafka utilizzando il comando ibmcloud ce sub kafka create. Utilizzare il segreto kafka-subscription-secret precedentemente creato per accedere al broker dei messaggi. Specifica le informazioni del broker in base alle informazioni delle credenziali del servizio per la tua risorsa Kafka. Per questo esempio, è possibile ottenere le informazioni del broker dall'output del comando ibmcloud resource service-key myeventstream-key. Notare che è necessario specificare un'opzione --broker per ciascun broker per il proprio argomento. L'opzione --destination specifica la risorsa Code Engine che riceve gli eventi.

    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. Visualizzare i dettagli della sottoscrizione evento Kafka.

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    Output di esempio

    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
    

Invio di eventi all'applicazione ricevente con la CLI

Ora che è stato creato l'abbonamento all'evento Kafka, che fa riferimento all'applicazione kafka-receiver-app, utilizza l' kafka-sender-app per inviare eventi di messaggio all'applicazione ricevente.

  1. Ottenere l'indirizzo URL pubblico dell'applicazione di destinazione, kafka-sender-app utilizzando il comando ibmcloud ce app get con l'opzione --output url per trovare il sito URL dell'applicazione.

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

    Output di esempio

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Esegui l'applicazione del produttore eventi Kafka kafka-sender-app per inviare gli eventi all'applicazione Code Engine di destinazione. Richiamare l'applicazione kafka-sender-app con curl e specificare i valori per l'argomento e il numero di messaggi. Utilizzare l'output del comando ibmcloud ce app get per trovare il sito URL pubblico dell'applicazione. Assicurati di racchiudere il valore tra virgolette per assicurarti che sia trattato come una singola stringa.

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

    Ad esempio,

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. Visualizzare gli eventi nei log. Quando la tua sottoscrizione evento Kafka viene creata con un broker, argomenti e un segreto di accesso validi e hai un'applicazione Kafka che produce messaggi su tale argomento (come kafka-sender-app), puoi visualizzare gli eventi nei log per la tua applicazione Code Engine di destinazione che riceve i messaggi Kafka, come kafka-receiver-app. Quando utilizzi l'applicazione ricevente Kafka (icr.io/codeengine/kafka-receiver), cerca Event data nei log per l'applicazione ricevente per vedere i messaggi ricevuti.

    ibmcloud ce app logs -n kafka-receiver-app2
    

    Output di esempio

    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
    

    Nota che le informazioni di log per le app durano solo un'ora. Per ulteriori informazioni sulla visualizzazione dei log per le applicazioni (o i lavori), vedi Visualizzazione dei log.

Informazioni di intestazione e corpo per eventi Kafka consegnati alle applicazioni

Tutti gli eventi inviati alle applicazioni vengono ricevuti come messaggi POST dell' HTTP. Gli eventi contengono alcune intestazioni HTTP che consentono di individuare rapidamente le informazioni chiave relative agli eventi senza dover esaminare il corpo (logica di business) dell'evento stesso. Per ulteriori informazioni, consultare CloudEvents spec.

Intestazioni per app

File di intestazione per gli eventi
Intestazione Descrizione
ce-id Un identificativo univoco per l'evento, a meno che un evento non venga riprodotto, nel qual caso, viene assegnato lo stesso ID.
ce-source Un riferimento URI che indica dove questo evento ha avuto origine dal produttore dell'evento. Per gli eventi Kafka, questa intestazione è nel seguente formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME].
ce-specversion La versione delle specifiche dell' CloudEvents. Questo valore è sempre 1.0.
ce-subject L'offset e il numero di partizione Kafka. Ad esempio, partition:0#1 fa riferimento alla partizione 0 e all'offset 1.
ce-time L'ora in cui l'evento è stato generato.
ce-type Il tipo di evento. Per gli eventi Kafka, questo è dev.knative.kafka.event.

Output di esempio

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 corpo per le applicazioni

Il corpo di HTTP contiene il messaggio Kafka ed è nel formato specificato al momento della creazione o dell'aggiornamento dell'abbonamento.

Configurazione di Code Engine per ricevere eventi Kafka per un lavoro

Affinché Code Engine funzioni con gli eventi Kafka, utilizzare la console o la CLI per configurare un abbonamento agli eventi Code Engine Kafka, in modo da connettersi ai broker di eventi Kafka e ascoltare gli eventi Kafka. Inoltre, configura un processo (o un’app) di “ Code Engine ” che funga da destinatario degli eventi “ Kafka ”. L'abbonamento agli eventi " Kafka " definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi.

Sottoscrizione degli eventi Kafka per un lavoro dalla console

È possibile utilizzare la console per configurare un abbonamento agli eventi di Kafka in modo che gli eventi vengano inviati a un processo di Code Engine.

Quando si crea una sottoscrizione evento per un lavoro, viene creata un'esecuzione lavoro per ogni evento attivato. Questa esecuzione lavoro ha le variabili di ambiente correlate al lavoro. L'abbonamento all'evento " Code Engine " ( Kafka ) si collega al broker di messaggi Kafka e invia le variabili d'ambiente relative al processo. Per ulteriori informazioni sulle variabili d'ambiente inviate da Kafka, consultare la sezione " Variabili d'ambiente per gli eventi ".

Creazione di un lavoro Code Engine per ricevere gli eventi Kafka dalla console

  1. Crea un lavoro Code Engine per agire come un event consumer di Kafka messaggi e ricevere gli eventi Kafka. Ad esempio, creare un job denominato kafka-receiver-job che utilizza l'immagine icr.io/codeengine/codeengine di esempio. Questa immagine viene creata da codeengine.go, disponibile da Esempi per il repository IBM Cloud Code Engine GitHub. Questo esempio non richiede alcuna variabile di ambiente.
  2. Dopo aver creato questo lavoro, confermare che si trova nello stato ready.

Quando si utilizza la console, non è necessario che l'app o il processo utilizzato per ricevere gli eventi " Kafka " esista già prima di creare l'abbonamento all'evento " Kafka ". Tuttavia, se l'app o il lavoro non esiste quando si crea la sottoscrizione evento, lo stato della sottoscrizione indica che l'utente non esiste. Devi creare l'applicazione o il lavoro prima che la sottoscrizione sia in stato pronto e possa ricevere gli eventi tramite questa sottoscrizione.

Creazione di una sottoscrizione evento Code Engine Kafka per un lavoro dalla console

L'abbonamento agli eventi " Kafka " definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi.

Prima di iniziare

Completa la seguente procedura per creare una sottoscrizione evento Kafka per un'applicazione dalla console.

  1. Dalla pagina ProgettiCode Engine, vai al tuo progetto.
  2. Dalla pagina Panoramica, fare clic su Sottoscrizioni eventi.
  3. Dalla pagina Sottoscrizioni evento, fare clic su Crea per creare la sottoscrizione.
  4. Dalla pagina Crea una sottoscrizione evento, selezionare il tile Event Streams / Kafka per specificare il tipo di evento.
  5. Per Generale, fornire un nome per la sottoscrizione Event Streams / Kafka. Fai clic su " Avanti " per continuare.
  6. Per ulteriori informazioni su Message Broker,
    1. Specificare gli host del broker di messaggi Kafka per le code di messaggi da cui vengono ricevuti i messaggi come eventi tramite questa sottoscrizione. Per ottenere informazioni su host, argomenti e credenziali di accesso del broker, visualizza i dettagli della credenziale del servizio per la tua istanza del servizio nella console Event Streams. Ad esempio, specificare "broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093" per gli host del broker dei messaggi per l'istanza del servizio myeventstream-key.
    2. Fare clic su Configura per configurare l'accesso al broker dei messaggi. Per autenticarti da Code Engine alla tua istanza Kafka o Event Streams, devi fornire un segreto di accesso del broker dei messaggi.
      • È possibile creare un nuovo segreto, scegliere un segreto esistente oppure, se le credenziali non sono richieste per accedere ai broker dei messaggi, scegliere None.
      • Per creare un segreto, fare clic su Crea. Fornire un nome per il segreto e i valori per username e password. I valori per username e password devono corrispondere ai valori nelle credenziali del servizio per l'istanza Kafka o Event Streams. Ad esempio, il valore per username è il valore di user elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams. Il valore per password è quello di apikey elencato nei dettagli delle credenziali del servizio nell'istanza del servizio Event Streams.
      • Per questo esempio, utilizzare il segreto kafka-subscription-secret esistente precedentemente creato.
    3. Specificare il nome degli argomenti esistenti per le code messaggi. Ad esempio, kafka-topic1. Per ottenere informazioni sugli argomenti esistenti per la tua istanza del servizio, vai alla tua istanza del servizio nella console Event Streams e visualizza Argomenti.
    4. (Facoltativo) Specificare un gruppo di consumatori. I consumer dei messaggi Kafka possono essere raggruppati in gruppi consumer. Se si utilizzano gruppi di consumatori, la configurazione dell'argomento controlla il flusso di messaggi per i consumatori nel gruppo di consumatori. Ogni volta che un consumer viene aggiunto o rimosso da un gruppo consumer, il flusso di messaggi da tale argomento potrebbe cambiare. Questa azione può far sì che i consumer esistenti non ricevano più messaggi da tale argomento.
    5. Fai clic su " Avanti " per proseguire.
  7. Per Consumer eventi, specificare il lavoro Code Engine per ricevere gli eventi. Nota che puoi scegliere da un elenco di lavori e app definiti oppure puoi fornire un nome per un lavoro (o app) che non è ancora stato creato. Non è necessario che l'app o il lavoro esistano quando crei la sottoscrizione evento con la console. Tuttavia, quando la sottoscrizione viene creata, lo stato della sottoscrizione indica che l'utente non esiste. È necessario creare il lavoro (o l'app) prima che la sottoscrizione sia in stato pronto e possa ricevere eventi tramite questa sottoscrizione. Per questo esempio, selezionare job come tipo di componente e utilizzare il job kafka-receiver-job che fa riferimento all'immagine icr.io/codeengine/codeengine come componente per ricevere eventi. Se il tuo lavoro non esiste, fornisci il nome del tuo lavoro e crea il tuo lavoro dopo aver creato la sottoscrizione Kafka. Solo per le applicazioni, è possibile specificare facoltativamente un percorso. Fai clic su " Avanti " per continuare.
  8. Per Riepilogo, esamina le impostazioni per la tua sottoscrizione evento Kafka e apporta le modifiche, se necessario. Quando pronto, fai clic su Crea per creare la sottoscrizione Kafka.

Invio di eventi al lavoro di ricezione dalla console

Ora che è stato creato l'abbonamento all'evento Kafka, che fa riferimento al job kafka-receiver-job, utilizza l' kafka-sender-app per inviare eventi di messaggio al job ricevente.

  1. Avviare la registrazione per il lavoro destinatario per visualizzare i log del lavoro dalla console per visualizzare gli eventi.

  2. (facoltativo) Avviare la registrazione per l'applicazione mittente per visualizzare i log dell'applicazione dalla console per vedere le informazioni sugli eventi inviati.

  3. Dopo aver avviato la registrazione, chiamare l'applicazione kafka-sender-app con curl e specificare l'indirizzo URL pubblico di kafka-sender-app, il nome dell'argomento e il numero di messaggi da inviare. È possibile ottenere il sito URL pubblico di questa applicazione dalla scheda Domain mappings della propria applicazione. Ad esempio,

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

Assicurati di racchiudere il valore tra virgolette per assicurarti che sia trattato come una singola stringa.

Quando la tua sottoscrizione Kafka viene creata con un broker, degli argomenti e un segreto di accesso validi e hai un lavoro Kafka che produce messaggi su tale argomento (come kafka-sender-app), puoi visualizzare gli eventi nei log per il tuo lavoro Code Engine che riceve i messaggi Kafka, come kafka-receiver-job. Quando si utilizza il lavoro destinatario Kafka (icr.io/codeengine/codeengine), cercare CE_DATA nei log per il lavoro destinatario per visualizzare i messaggi ricevuti.

Sottoscrizione di eventi Kafka per un lavoro con la CLI

È possibile utilizzare la CLI per configurare un abbonamento agli eventi di Kafka in modo che gli eventi vengano inviati a un’attività di Code Engine.

Quando si crea una sottoscrizione evento per un lavoro, viene creata un'esecuzione lavoro per ogni evento attivato. Questa esecuzione lavoro ha le variabili di ambiente correlate al lavoro. L'abbonamento all'evento " Code Engine " ( Kafka ) si collega al broker di messaggi Kafka e invia le variabili d'ambiente relative al processo. Per ulteriori informazioni sulle variabili d'ambiente inviate da Kafka, consultare la sezione " Variabili d'ambiente per gli eventi ".

Creazione di un lavoro Code Engine per ricevere gli eventi Kafka con la CLI

Prima di iniziare

  1. Crea un lavoro Code Engine per agire come un event consumer di Kafka messaggi e ricevere gli eventi Kafka. Ad esempio, crea un lavoro denominato kafka-receiver-job che utilizza l'immagine icr.io/codeengine/codeengine. Questa immagine viene creata da codeengine.go, disponibile da Esempi per il repository IBM Cloud Code Engine GitHub.

    ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine
    
  2. (Facoltativo) Dopo aver creato questo lavoro, eseguire il comando job get per visualizzare le informazioni su questo lavoro.

    ibmcloud ce job get -n kafka-receiver-job
    

Creazione di una sottoscrizione di evento Code Engine Kafka per un lavoro con la CLI

È possibile creare un abbonamento agli eventi " Kafka ", che definisce la relazione tra il produttore (mittente) Kafka e il consumatore (destinatario) degli eventi, tramite la CLI.

  1. Crea una sottoscrizione evento Kafka Code Engine per i tuoi eventi Kafka utilizzando il comando ibmcloud ce sub kafka create. Utilizzare il segreto kafka-subscription-secret precedentemente creato per accedere al broker dei messaggi. Specifica le informazioni del broker in base alle informazioni delle credenziali del servizio per la tua risorsa Kafka. Per questo esempio, è possibile ottenere le informazioni del broker dall'output del comando ibmcloud resource service-key myeventstream-key. Notare che è necessario specificare un'opzione --broker per ciascun broker per il proprio argomento. L'opzione --destination specifica la risorsa Code Engine che riceve gli eventi. Quando si gestisce un lavoro di ricezione, è necessario specificare anche l'opzione --destination-type per specificare che la risorsa è un lavoro, poiché il valore predefinito per questa opzione è app.

    ibmcloud ce sub kafka create --name mykafkasubscription-withjob --destination-type job --destination kafka-receiver-job --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker  broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093
    
  2. Visualizzare i dettagli della sottoscrizione evento Kafka.

    ibmcloud ce sub kafka get -n mykafkasubscription-withjob
    

    Output di esempio

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

Invio di eventi al lavoro di ricezione con la CLI

Ora che è stato creato l'abbonamento all'evento Kafka, che fa riferimento all'applicazione kafka-receiver-job, utilizza l' kafka-sender-app per inviare eventi di messaggio all'applicazione ricevente.

  1. Ottenere l'indirizzo URL pubblico dell'applicazione di destinazione, kafka-sender-app, utilizzando il comando ibmcloud ce app get per trovare il sito URL dell'applicazione.

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

    Output di esempio

    https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud
    
  2. Esegui l'applicazione event - producer Kafka kafka-sender-app per inviare gli eventi al lavoro Code Engine di destinazione. Richiamare l'applicazione kafka-sender-app con curl e specificare i valori per l'argomento e il numero di messaggi. Utilizzare l'output del comando ibmcloud ce app get per trovare il sito URL pubblico dell'applicazione che produce eventi. Assicurati di racchiudere il valore tra virgolette per assicurarti che sia trattato come una singola stringa. Ad esempio,

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

    Ad esempio,

    curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1"
    
  3. Visualizzare gli eventi nei log. Quando la tua sottoscrizione evento Kafka viene creata con un broker, argomenti e un segreto di accesso validi e hai un'applicazione Kafka che produce messaggi su tale argomento (come kafka-sender-app), puoi visualizzare gli eventi nei log per il tuo lavoro Code Engine di destinazione che riceve messaggi Kafka, come kafka-receiver-job. Per ogni messaggio inviato utilizzando curl, lo stesso numero di esecuzioni di lavori viene attivato dagli eventi Kafka. Per visualizzare gli eventi inviati ai lavori, utilizzare il comando ibmcloud ce jobrun logs.

    1. Utilizzare il comando ibmcloud ce jobrun list per elencare le esecuzioni del lavoro kafka-receiver-job.
        ibmcloud ce jobrun list --job kafka-receiver-job
        ```
    2. Utilizzare il comando **`ibmcloud ce jobrun logs`** per ottenere i log per un'esecuzione lavoro specifica.
    
    ```txt {: pre}
        ibmcloud ce jobrun logs -n kafka-receiver-job-abcde
        ```
        Output di esempio
    
        ```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
        ```
    Quando si utilizza il lavoro destinatario Kafka (`icr.io/codeengine/codeengine`), cercare `CE_DATA` nei log per il lavoro destinatario per visualizzare i messaggi ricevuti.
    
    Tenere presente che le informazioni di log per le esecuzioni del lavoro durano solo un'ora. Per ulteriori informazioni sulla visualizzazione dei log per applicazioni o lavori, vedi [Visualizzazione dei log](/docs/codeengine?topic=codeengine-logging).
    
    
    
    

Variabili di ambiente per eventi Kafka consegnati ai lavori

Tutti gli eventi consegnati a un lavoro vengono ricevuti come variabili di ambiente. Tali variabili di ambiente includono un prefisso CE_ e si basano sulla CloudEvents spec.

Ogni evento contiene alcune variabili di ambiente comuni che vengono visualizzate ogni volta che l'evento viene consegnato a un lavoro. L'insieme effettivo di variabili in ogni evento può includere più opzioni. Per ulteriori informazioni, consultare Attributi CloudEvent.

La seguente tabella descrive le variabili di ambiente specifiche degli eventi Kafka.

Variabili d'ambiente per gli eventi
Variabile Descrizione
CE_DATA I dati (corpo) per l'evento.
CE_DOMAIN La parte del nome di dominio di URL dell'applicazione (e del progetto).
CE_ID Un identificativo univoco per l'evento, a meno che un evento non venga riprodotto, nel qual caso, viene assegnato lo stesso ID.
CE_SOURCE Un riferimento URI che indica dove questo evento ha avuto origine dal produttore dell'evento. Per gli eventi Kafka, questa intestazione è nel seguente formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME].
CE_SPECVERSION La versione delle specifiche dell' CloudEvents. Questo valore è sempre 1.0.
CE_SUBDOMAIN La porzione di sottodominio di URL associata all'applicazione (e al progetto). Se si ha familiarità con Kubernetes, CE_SUBDOMAIN corrisponde allo spazio dei nomi Kubernetes associato al progetto.
CE_SUBJECT L'offset e il numero di partizione Kafka. Ad esempio, partition:0#1 fa riferimento alla partizione 0 e all'offset 1.
CE_TIME L'ora in cui l'evento è stato generato.
CE_TYPE Il tipo di evento. Per gli eventi Kafka, questo è dev.knative.kafka.event.

Output di esempio

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

Visualizzazione e aggiornamento delle sottoscrizioni eventi Kafka

È possibile visualizzare i dettagli relativi all'abbonamento all'evento " Kafka " oppure aggiornare l'abbonamento.

Visualizzazione e aggiornamento delle sottoscrizioni evento Kafka dalla console

  • Per visualizzare le informazioni sulle sottoscrizioni degli eventi

    1. Dalla pagina ProgettiCode Engine, vai al tuo progetto.
    2. Dalla pagina Panoramica, fare clic su Sottoscrizioni evento per visualizzare un elenco di richieste definite.
  • Per aggiornare una sottoscrizione evento

    1. Vai alla pagina del tuo abbonamento. Per passare alla pagina Sottoscrizioni, andare alla pagina Sottoscrizioni evento e fare clic sul nome della sottoscrizione che si desidera aggiornare.
    2. Aggiornare la sottoscrizione. Ad esempio, modifica l'argomento per una sottoscrizione Kafka in un argomento differente. Dalla scheda Dettagli broker messaggi, rimuovere l'argomento esistente dalla sezione Argomenti e aggiungere il nome del nuovo argomento.
    3. Fai clic su Save per salvare le modifiche.

Visualizzazione e aggiornamento delle sottoscrizioni evento Kafka con la CLI

  • Per visualizzare le informazioni sulle tue sottoscrizioni evento con la CLI, utilizza il comando ibmcloud ce subscription kafka get.

    ibmcloud ce sub kafka get -n mykafkasubscription
    

    Output di esempio

    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
    
  • Per aggiornare una sottoscrizione evento con la CLI, utilizza il comando ibmcloud ce subscription kafka update. Il seguente esempio aggiorna il nome dell'argomento.

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

    È possibile utilizzare il ibmcloud ce subscription kafka update per aggiornare i valori relativi all'abbonamento Kafka. Tuttavia, non è possibile modificare il valore per il gruppo di consumatori con questo comando. Se desideri aggiornare la sottoscrizione per farvi riferimento a un argomento diverso, assicurati che l'argomento Kafka esista prima di aggiornare la sottoscrizione.

Eliminazione di una sottoscrizione evento Kafka

Quando non ti serve più l'abbonamento a Kafka, puoi cancellarlo.

Quando si elimina un abbonamento, le credenziali del servizio relative all'istanza del servizio " Event Streams " vengono utilizzate per rimuovere i gruppi di consumatori dall'istanza del servizio " Event Streams ". Se le credenziali del servizio sono già state eliminate o non sono valide al momento dell'eliminazione dell'abbonamento, i gruppi di consumatori non possono essere rimossi dall'istanza del servizio " Event Streams ". La richiesta di cancellazione dell'abbonamento all'evento " Code Engine " ( Kafka ) non va a buon fine.

Eliminazione di una sottoscrizione Kafka dalla console

  1. Dalla pagina ProgettiCode Engine, vai al tuo progetto.
  2. Dalla pagina Panoramica, fare clic su Sottoscrizioni evento per visualizzare un elenco di richieste definite.
  3. Dall'elenco di sottoscrizioni, eliminare la sottoscrizione che si desidera rimuovere dall'applicazione o dal lavoro.

Se si elimina un'app o un lavoro associato alla sottoscrizione, la sottoscrizione non viene eliminata. Se si ricrea l'applicazione o il lavoro (o un'altra applicazione o lavoro con lo stesso nome), la sottoscrizione si riconnette con l'applicazione o il lavoro.

Eliminazione di una sottoscrizione Kafka con la CLI

Puoi eliminare una sottoscrizione Kafka eseguendo il comando ibmcloud ce subscription kafka delete.

Ad esempio, utilizza il seguente comando per eliminare una sottoscrizione Kafka denominata mykafkasubscription,

ibmcloud ce subscription kafka delete --name mykafkasubscription

Se si elimina un'app o un lavoro associato alla sottoscrizione, la sottoscrizione non viene eliminata. Invece, passa allo stato pronto di false perché la sottoscrizione dipende dalla disponibilità dell'applicazione o del lavoro. Se crei di nuovo l'applicazione o il lavoro (o un'altra applicazione o lavoro con lo stesso nome), la tua sottoscrizione si riconnette e lo stato Pronto è true.

Definizione di attributi evento aggiuntivi

Quando si crea una sottoscrizione, è possibile definire ulteriori attributi CloudEvent da includere in qualsiasi evento generato. Questi attributi sono simili a qualsiasi altro attributo CloudEvent nella consegna dell'evento. Se si sceglie di specificare il nome di un attributo CloudEvent esistente, sovrascrive il valore originale incluso nell'evento.

Per definire gli attributi di aggiunta, utilizzare le opzioni --extension con il comando CLI ibmcloud ce subscription kafka create.

Per ulteriori informazioni, vedi Posso utilizzare altre specifiche CloudEvents ?