Trabalhando com a produtora de eventos “ Kafka ”
Uma assinatura do tipo “ Code Engine ” ( Kafka ) monitora o aparecimento de novas mensagens em uma instância do “ Kafka ”. Ao criar uma assinatura para um conjunto de tópicos, o seu app ou job recebe um evento separado para cada nova mensagem que aparece em um dos tópicos. Você pode criar, no máximo, 100 assinaturas do Kafka por projeto.
Embora seja possível usar qualquer instância do Kafka, os exemplos neste tópico utilizam o serviço IBM® Event Streams for IBM Cloud®. O Event Streams é um serviço de streaming de eventos do IBM para eventos do Kafka. Para obter mais informações sobre este serviço, consulte a documentação do Event Streams.
Configurando o produtor de eventos “ Kafka ”
Você pode configurar seu produtor de mensagens do Kafka para enviar mensagens às assinaturas de eventos Code Engine e Kafka. Use sua assinatura de eventos do Code Engine Kafka para acionar aplicativos ou tarefas quando for recebida uma mensagem do Kafka.
Para começar, crie uma instância de serviço Event Streams para o seu serviço de streaming de eventos. Enquanto você pode usar o console ou a CLI, as etapas a seguir descrevem como configurar o produtor de eventos Event Streams com o CLI.
Configurando o ambiente CLI Event Streams
-
Faça download e instale o IBM Cloud CLI. Efetue login na CLI do IBM Cloud .
ibmcloud login -
Faça download e instale o Code Engine CLI.
ibmcloud plugin install code-engine -f -
Para usar o serviço Event Streams para criar sua instância Kafka, faça o download e instale o Event Streams CLI.
ibmcloud plugin install event-streams -f -
Faça login em sua conta IBM Cloud e vise um grupo de recursos. Direcione um grupo de recursos executando o comando a seguir. Para obter uma lista dos seus grupos de recursos, execute o comando
ibmcloud resource groups.ibmcloud target -g <resource_group>
Configurando sua instância do Kafka
-
Crie uma instância de serviço para Event Streams. O nome do serviço CLI Event Streams é
messagehub. Para este exemplo, crie uma instância de serviço Event Streams que é denominadamyeventstream.ibmcloud resource service-instance-create myeventstream messagehub lite us-south -
Crie uma chave de serviço para fornecer credenciais à sua instância de serviço.
ibmcloud resource service-key-create myeventstream-key Manager --instance-name myeventstreamSaída de exemplo
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: tokenAnote os valores para
user,passwordekafka-brokers_saslpara a sua chave de serviço. Você precisa desta informação quando configurar sua assinatura Code Engine Kafka. Os valores parapasswordeapikeysão os mesmos na chave de serviço para a sua instância de serviço Event Streams. Você também pode usar o comandoibmcloud resource service-key myeventstream-keypara recuperar as informações da chave de serviço. -
Inicialize o plug-in Event Streams em relação à sua instância de serviço Event Streams.
ibmcloud es init --instance-name myeventstream -
Crie um tópico no Event Streams.
ibmcloud es topic-create kafka-topic1
Configuração de um app de amostra Code Engine para produzir mensagens Kafka
Para este cenário, vamos usar um aplicativo Code Engine para atuar como um produtor de eventos de mensagens Kafka. O propósito deste aplicativo é conectar-se à sua instância Event Streams e para enviar mensagens Kafka. Este aplicativo usa
o Code Engine Kafka sender sample app para enviar mensagens Kafka. Esta imagem de remetente de amostra requer a variável de ambiente BROKERS e um segredo que inclui as credenciais password. Você pode criar esse aplicativo a partir do console ou usando a CLI.
Certifique-se de especificar o cabeçalho Content-Type ao enviar mensagens d Kafka para Event Streams. Especifique esse cabeçalho para que o consumidor possa receber mensagens com o tipo de conteúdo esperado; por exemplo, application/json..
Criando um segredo com credenciais exigidas pelas amostras de Kafka
Antes de criar o aplicativo Code Engine para enviar mensagens Kafka, crie um segredo Code Engine secreto que contém as credenciais necessárias.
Antes de Iniciar
- Determine o projeto Code Engine que você deseja usar e certise-se de que este projeto esteja selecionado. Veja Criar e trabalhar com um projeto.
Para simplificar neste cenário, crie um segredo, kafka-subscription-secret, para conter as credenciais necessárias tanto para o aplicativo de exemplo remetente Kafka quanto para a assinatura de eventos Kafka, que utiliza o aplicativo
de exemplo receptor Kafka. Essas credenciais são necessárias para que o aplicativo remetente de exemplo Kafka e a assinatura de eventos Code Engine Kafka possam se comunicar com a instância do serviço Event Streams. Embora não seja obrigatório
criar esse segredo antes de criar o aplicativo remetente do Kafka e a assinatura do evento, essa ação simplifica as etapas necessárias.
Criando um segredo com credenciais necessárias pelas amostras de Kafka a partir do console
Para criar o segredo do kafka-subscription-secret no console, acesse Segredos e configmaps e clique em Criar e selecione o segredo que você deseja criar. Para obter mais informações, consulte
criar um segredo do console.
- Especifique a chave
usernamecom o valor deuserque está listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. Para a instância de serviço Event Streams, este valor étoken. Esta chave é necessária para autenticação entre a assinatura de eventos Code Engine Kafka e o intermediário de mensagens Kafka. - Especifique a chave
passwordcom o valor deapikeyque está listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. Esta chave é necessária para a amostra do remetente, e para ativar as comunicações entre a assinatura de eventos Code Engine Kafka e o intermediário de mensagens Kafka.
Criando um segredo com credenciais necessárias pelas amostras de Kafka com a CLI
Para criar o segredo kafka-subscription-secret com a CLI, inclua uma variável de ambiente literal para password, e username. Para obter mais informações, consulte crie um segredo com a CLI.
-
Especifique a chave
usernamecom o valor deuserque está listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. Para a instância de serviço Event Streams, este valor étoken. Esta chave é necessária para autenticação entre a assinatura de eventos Code Engine Kafka e o intermediário de mensagens Kafka. -
Especifique a chave
passwordcom o valor deapikeyque está listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. Esta chave é necessária para a amostra do remetente, e para ativar as comunicações entre a assinatura de eventos Code Engine Kafka e o intermediário de mensagens Kafka.ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=<value_of_apikey> --from-literal username=<value_of_user>Por exemplo,
ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh --from-literal username=token
Como criar um app Code Engine para enviar eventos
Crie um aplicativo Code Engine para se conectar à sua instância Event Streams e produzir (enviar) mensagens Kafka para um destinatário de mensagens Kafka (consumidor Kafka ).
Criando um app Code Engine para enviar eventos a partir do console
Para criar o aplicativo “ kafka-sender-app ” a partir do console, siga as etapas a seguir.
-
Criar um aplicativo Code Engine que é chamado
kafka-sender-appcom as seguintes informações.- Referência a imagem de contêiner
icr.io/codeengine/kafka-senderpara este app. Essa imagem é construída a partir dosender.go, que está disponível a partir do Amostras para IBM Cloud Code Engine GitHub repo. Este app de remetente de amostra requer valores parapasswordeBROKERS. - Na seção Variáveis de ambiente (opcional), inclua as variáveis de ambiente a seguir.
- Adicionar uma variável de ambiente literal,
BROKERS. Para o valor desta chave, especifique um ou mais dos hosts do corretor que estão listados nos detalhes das credenciais de serviço na instância de serviço Event Streams. - Adicionar outra variável de ambiente para referencia o segredo completo,
kafka-subscription-secret. Este segredo contém as credenciais parapassword.
- Adicionar uma variável de ambiente literal,
- (opcional) Na seção Recursos e ajuste de escala, especifique
1para o número mínimo de instâncias para que o app sempre tenha uma instância em execução e não seja escalado para zero. Configurar o app para sempre ter uma instância em execução é útil quando você visualiza logs. Se você estiver em execução em um ambiente de produção, considere o custo de manter uma instância em execução de seu app ou se deseja Code Engine para autoscale a zero. Por padrão, o app escala para zero quando não em uso. - Clique em Criar para criar e implementar seu app.
- Referência a imagem de contêiner
-
Confirme se este app está em
readystatus.
Criação de um app Code Engine para enviar eventos com a CLI
Para criar o aplicativo kafka-sender-app com a CLI, use os comandos a seguir.
-
Criar um aplicativo Code Engine que é chamado
kafka-sender-appcom as seguintes informações.- Especifique a opção
--imagepara referencia a imagem do contêinericr.io/codeengine/kafka-sender. Essa imagem é construída a partir dosender.go, que está disponível a partir do Amostras para IBM Cloud Code Engine GitHub repo. Este app de remetente de amostra requer as credenciaispasswordque são armazenadas em seukafka-subscription-secret, e ele requer a variável de ambienteBROKERS. - Especifique a opção
--env-from-secretpara referenciar o segredo completo,kafka-subscription-secret, que contém as credenciaispassword. - Especifique a opção
--envpara adicionar uma variável de ambiente literal,BROKERS, e forneça o nome de um dos hosts do corretor que estão listados nos detalhes das credenciais de serviço na instância de serviço Event Streams. No entanto, se você quiser especificar mais de um hostname do intermediário, use o formato--env BROKERS-broker1,broker2,broker3. - (opcional) Especifique a opção
--min-scale=1para que o aplicativo tenha sempre uma instância em execução e não seja reduzido a zero. Configurar o app para sempre ter uma instância em execução é útil quando você visualiza logs. Se você estiver em execução em um ambiente de produção, considere o custo de manter uma instância em execução de seu app ou se deseja Code Engine para autoscale a zero. Por padrão, o app escala para zero quando não em 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 - Especifique a opção
Configurando o Code Engine para receber eventos Kafka para um app
Para que o Code Engine funcione com eventos do Kafka, use o console ou a CLI para configurar uma assinatura de eventos do Code Engine Kafka para se conectar aos corretores de eventos do Kafka e monitorar eventos do Kafka. Além disso, configure um aplicativo (ou tarefa) do tipo “ Code Engine ” para atuar como receptor dos eventos “ Kafka ”. A assinatura de eventos do Kafka define a relação entre o produtor (remetente) Kafka e o consumidor (destinatário) de eventos.
A assinatura de evento Code Engine Kafka se conecta ao seu corretor de mensagens Kafka e envia solicitações HTTP Post para cada mensagem Kafka recebida para o aplicativo receptor. Para obter mais informações, consulte Informações de cabeçalhos e de corpo de HTTP para eventos.
Inscrição em eventos do tipo “ Kafka ” para um aplicativo a partir do console
Você pode usar o console para configurar uma assinatura de eventos do Kafka, de modo que os eventos sejam enviados a um aplicativo do Code Engine.
Criando um app Code Engine para receber eventos Kafka a partir do console
- Criar um aplicativo Code Engine para atuar como consumidor de eventos de Kafka mensagens e receber os eventos Kafka. Por exemplo, crie um aplicativo
que seja chamado
kafka-receiver-appe que use a imagemicr.io/codeengine/kafka-receiver. Essa imagem é construída a partir doreceiver.go, que está disponível a partir do Amostras para IBM Cloud Code Engine GitHub repo. Esta amostra não requer nenhuma variável de ambiente. - Depois de implementar este app, confirme se ele está em
readystatus.
Ao usar o console, não é necessário que o aplicativo ou a tarefa que você utiliza para receber eventos do tipo “ Kafka ” já exista antes de criar a assinatura do evento “ Kafka ”. No entanto, se o app ou job não existir quando você cria a assinatura do evento, o status da assinatura reflete que o consumidor não existe. Você deve criar o app ou tarefa antes que a assinatura esteja em um estado pronto e possa receber eventos por meio desta assinatura.
Criando uma assinatura de eventos Code Engine Kafka para um app a partir do console
A assinatura de eventos do Kafka define a relação entre o produtor (remetente) Kafka e o consumidor (destinatário) de eventos.
Antes de Iniciar
- Determine o projeto Code Engine que você deseja usar e certise-se de que este projeto esteja selecionado. Veja Criar e trabalhar com um projeto.
Siga as etapas a seguir para criar uma assinatura de eventos do Kafka para um aplicativo a partir do console.
- Na página “Projetos” do Code Engine, acesse o seu projeto.
- A partir da página Visão Geral, clique em Assinaturas de eventos.
- A partir da página de Assinaturas de eventos, clique em Criar para criar sua assinatura.
- A partir da página Criar uma assinatura de eventos, selecione o tile
Event Streams / Kafkapara especificar o tipo de evento. - Para Geral, forneça um nome para a assinatura
Event Streams / Kafka. Clique em Avançar para continuar. - Para obter detalhes sobre o Message Broker,
- Especifique os hosts do broker de mensagens do Kafka para as filas de mensagens das quais as mensagens são recebidas como eventos por meio desta assinatura. Para obter informações sobre os hosts do corretor, tópicos e credenciais de
acesso, visualize os detalhes da credencial de serviço para sua instância de serviço no console Event Streams. Por exemplo, especifique
"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"para os hosts do intermediário de mensagens para a instância de serviçomyeventstream-key. Você pode encontrar os intermediários para a instância de serviço no campo Event Streams no campoKafka_brokers_sasl. - Clique em Configurar para configurar o acesso ao intermediário de mensagens. Para autenticar a partir de Code Engine para a sua instância Kafka ou Event Streams, é necessário fornecer um segredo de acesso a um intermediário
de mensagens.
- Você pode criar um novo segredo, escolher um segredo existente ou se as credenciais não forem necessárias para acessar os intermediários de mensagens, então escolha
None. - Para criar um segredo, clique em Criar. Forneça um nome para o segredo, e valores para
usernameepassword. Os valores parausernameepassworddevem corresponder aos valores nas credenciais de serviço para a instância Kafka ou Event Streams. Por exemplo, o valor parausernameé o valor deuserque é listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. O valor parapasswordé o valor deapikeyque é listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. - Para este exemplo, use o segredo existente
kafka-subscription-secretque foi criado anteriormente.
- Você pode criar um novo segredo, escolher um segredo existente ou se as credenciais não forem necessárias para acessar os intermediários de mensagens, então escolha
- Especificar o nome de tópicos existentes para as filas de mensagens. Por exemplo,
kafka-topic1. Para obter informações sobre os tópicos existentes para a sua instância de serviço, acesse sua instância de serviço no console Event Streams e visualize Topics. - (Opcional) Especificar um grupo de consumidores. Os consumidores de mensagens Kafka podem ser agrupados em grupos de consumidores. Se você estiver usando grupos de consumidores, a configuração de tópico controla o fluxo de mensagens para os consumidores no grupo de consumidores. Sempre que um consumidor é adicionado ou removido de um grupo de consumidores, o fluxo de mensagens a partir desse tópico pode mudar. Essa ação pode fazer com que os consumidores existentes não recebam mais mensagens desse tópico.
- Clique em Avançar para continuar.
- Especifique os hosts do broker de mensagens do Kafka para as filas de mensagens das quais as mensagens são recebidas como eventos por meio desta assinatura. Para obter informações sobre os hosts do corretor, tópicos e credenciais de
acesso, visualize os detalhes da credencial de serviço para sua instância de serviço no console Event Streams. Por exemplo, especifique
- Para o consumidor de eventos, especifique o aplicativo Code Engine para receber eventos. Observe que você pode escolher a partir de uma lista de aplicativos e empregos definidos, ou você pode fornecer um nome para um app
(ou job) que ainda não está criado. Não é necessário que o app ou o job existam quando você cria a assinatura do evento com o console. No entanto, quando a assinatura é criada, o status da assinatura reflete que o consumidor não existe.
Você deve criar o app ou tarefa antes que a assinatura esteja em um estado pronto e possa receber eventos por meio desta assinatura. Para este exemplo, use o aplicativo
kafka-receiver-appque referencia a imagemicr.io/codeengine/kafka-receiver. Se seu app não existir, forneça o nome de seu aplicativo e crie seu aplicativo depois de criar a assinatura do Kafka. Apenas para aplicativos, é possível especificar opcionalmente um caminho. Por padrão, os eventos são encaminhados para a URL raiz do aplicativo de destino. É possível enviar eventos para um destino diferente dentro do app especificando um caminho. Por exemplo, se o seu caminho de assinatura especificar/events, os eventos serão enviados parahttps://<base application URL>/events. Clique em Avançar para continuar. - Para resumir, verifique as configurações da sua assinatura de eventos do Kafka e faça as alterações necessárias, se for o caso. Quando estiver pronto, clique em “Criar” para criar a assinatura do “ Kafka ”.
Como enviar eventos para o app de recebimento a partir do console
Agora que sua assinatura de eventos Kafka, que faz referência ao aplicativo kafka-receiver-app, foi criada, use o kafka-sender-app para enviar eventos de mensagem ao aplicativo receptor.
-
Inicie a criação de logs para o aplicativo receptor para visualizar logs do aplicativo a partir do console para ver eventos.
-
(opcional) Inicie a criação de logs para o aplicativo do remetente para visualizar logs do aplicativo a partir do console para ver informações sobre eventos enviados.
-
Depois que o registro em log for iniciado, chame o aplicativo
kafka-sender-appcomcurle especifique o URL público dokafka-sender-app, o nome do seu tópico e o número de mensagens a serem enviadas. Você pode obter o URL público desse aplicativo na guia Domain mappings (Mapeamentos de domínio ) do seu aplicativo. Por exemplo,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
Certifique-se de agrupar o valor para curl entre aspas para garantir que ele seja tratado como uma única string.
Inscrição em eventos do Kafka para um aplicativo usando a CLI
Você pode usar a CLI para configurar uma assinatura de eventos do Kafka, de modo que os eventos sejam enviados para um aplicativo do Code Engine.
Os eventos são enviados para aplicativos como solicitações de POST HTTP. Para obter mais informações sobre os dados incluídos nos eventos do Kafka, consulte os cabeçalhos e o corpo das mensagens do HTTP referentes a esses eventos. Se o seu evento for enviado para uma tarefa do Code Engine, a tarefa recebe os eventos como variáveis de ambiente. Para obter mais informações sobre as variáveis de ambiente para assinaturas do serviço “ Kafka ”, consulte Variáveis de ambiente para eventos.
Criação de um app Code Engine para receber eventos Kafka com a CLI
Antes de Iniciar
-
Criar um aplicativo Code Engine para atuar como consumidor de eventos de Kafka mensagens e receber os eventos Kafka. Por exemplo, crie um aplicativo que seja chamado
kafka-receiver-app2e que use a imagemicr.io/codeengine/kafka-receiver. Essa imagem é construída a partir doreceiver.go, que está disponível a partir do Amostras para IBM Cloud Code Engine GitHub repo. Esta amostra não requer nenhuma variável de ambiente. Opcionalmente, você pode especificar a opção “--min-scale=1”, de modo que o aplicativo sempre tenha uma instância em execução e não seja reduzido a zero. Configurar o app para sempre ter uma instância em execução é útil quando você visualiza logs. Se você estiver em execução em um ambiente de produção, considere o custo de manter uma instância em execução de seu app ou se deseja Code Engine para autoscale a zero. Por padrão, o app escala para zero quando não em uso.ibmcloud ce app create -n kafka-receiver-app2 --image icr.io/codeengine/kafka-receiver --min-scale 1Por padrão, os eventos são encaminhados para a URL raiz do aplicativo de destino. É possível enviar eventos para um destino diferente dentro do app, usando a opção
--path. Por exemplo, se a sua assinatura especificar--path /event, o evento será enviado parahttps://<base application URL>/events. -
Depois de implementar este app, execute o comando
app getpara confirmar se o app está emreadystatus.ibmcloud ce app get -n kafka-receiver-app2
Criando uma assinatura de eventos Code Engine Kafka para um app com a CLI
É possível criar uma assinatura de evento do Kafka — que define a relação entre o produtor (remetente) e o consumidor (destinatário) de eventos do Kafka — por meio da CLI.
-
Crie uma assinatura de eventos Code Engine Kafka para os seus eventos Kafka usando o comando
ibmcloud ce sub kafka create. Use o segredokafka-subscription-secretque você criou anteriormente para acessar o intermediário de mensagens. Especifique as informações do intermediário com base nas informações de credenciais de serviço para o seu recurso Kafka. Para este exemplo, é possível obter as informações do intermediário a partir da saída do comandoibmcloud resource service-key myeventstream-key. Observe que você deve especificar uma opção--brokerpara cada intermediário para o seu tópico. A opção--destinationespecifica o recurso Code Engine que recebe os eventos.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 -
Exibir os detalhes da assinatura do evento “ Kafka ”.
ibmcloud ce sub kafka get -n mykafkasubscriptionSaída de exemplo
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
Como enviar eventos para o app de recebimento com a CLI
Agora que sua assinatura de eventos Kafka, que faz referência ao aplicativo kafka-receiver-app, foi criada, use o kafka-sender-app para enviar eventos de mensagem ao aplicativo receptor.
-
Obtenha o URL público do aplicativo de destino,
kafka-sender-app, usando o comandoibmcloud ce app getcom a opção--output urlpara localizar o URL de seu aplicativo.ibmcloud ce app get -n kafka-sender-app --output urlSaída de exemplo
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
Execute o aplicativo de produtor de eventos Kafka,
kafka-sender-apppara enviar eventos para o aplicativo Code Engine. Ligue para o aplicativokafka-sender-appcomcurle especifique valores para o tópico e o número de mensagens. Use o resultado doibmcloud ce app getpara encontrar o URL público do seu aplicativo. Certifique-se de agrupar o valor para curl entre aspas para garantir que ele seja tratado como uma única string.curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"Por exemplo,
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
Visualizar eventos em logs. Quando a sua assinatura de eventos Kafka é criada com um intermediário, tópicos e um segredo de acesso que são válidos, e você tem um aplicativo Kafka que produz mensagens naquele tópico (como
kafka-sender-app), então você pode ver eventos em logs para o seu destino Code Engine aplicativo que recebe mensagens Kafka, comokafka-receiver-app. Ao utilizar o app do receptor Kafka (icr.io/codeengine/kafka-receiver), procure porEvent datanos logs para o aplicativo receptor ver as mensagens que são recebidas.ibmcloud ce app logs -n kafka-receiver-app2Saída de exemplo
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: 1Observe que as informações de log dos aplicativos ficam armazenadas por apenas uma hora. Para obter mais informações sobre visualização de logs para apps (ou jobs), consulte Visualizações de logs.
Informações de cabeçalho e corpo para os eventos Kafka que são entregues a apps
Todos os eventos que são entregues aos aplicativos são recebidos como mensagens HTTP POST. Os eventos contêm certos cabeçalhos de HTTP que o ajudam a determinar rapidamente os bits de chave de informações sobre os eventos sem olhar para o
corpo (lógica de negócios) do evento. Para obter mais informações, consulte a especificação do CloudEvents.
Cabeçalhos para apps
| Cabeçalho | Descrição |
|---|---|
ce-id |
Um identificador exclusivo para o evento, a menos que um evento seja reproduzido. Nesse caso, ele é designado com o mesmo ID. |
ce-source |
Uma referência de URI que indica de que local esse evento teve origem dentro do produtor de evento. Para os eventos Kafka, este cabeçalho está no seguinte formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME]. |
ce-specversion |
A versão da especificação CloudEvents. Esse valor é sempre 1.0. |
ce-subject |
O número de partição Kafka e deslocamento. Por exemplo, partition:0#1 refere-se à partição 0 e deslocamento 1. |
ce-time |
O horário no qual o evento foi gerado. |
ce-type |
O tipo do evento. Para os eventos Kafka, este é dev.knative.kafka.event. |
Saída de exemplo
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 para aplicativos
O corpo da mensagem “ HTTP ” contém a mensagem “ Kafka ” e está no formato que você especifica ao criar ou atualizar a assinatura.
Configurando o Code Engine para receber eventos Kafka para um trabalho
Para que o Code Engine funcione com eventos do Kafka, use o console ou a CLI para configurar uma assinatura de eventos do Code Engine Kafka para se conectar aos corretores de eventos do Kafka e monitorar eventos do Kafka. Além disso, configure uma tarefa (ou aplicativo) do Code Engine para atuar como receptor dos eventos Kafka. A assinatura de eventos do Kafka define a relação entre o produtor (remetente) Kafka e o consumidor (destinatário) de eventos.
Inscrição em eventos d Kafka es para uma tarefa a partir do console
Você pode usar o console para configurar uma assinatura de eventos do Kafka, de modo que os eventos sejam enviados para uma tarefa do Code Engine.
Ao criar uma assinatura de evento para uma tarefa, uma execução de tarefa é criada para cada evento que é acionado. Essa execução de tarefa tem as variáveis de ambiente que estão relacionadas ao job. A assinatura do evento “ Code Engine ” ( Kafka ) se conecta ao seu broker de mensagens Kafka e envia variáveis de ambiente relacionadas ao trabalho. Para obter mais informações sobre as variáveis de ambiente enviadas pelo Kafka, consulte Variáveis de ambiente para eventos.
Como criar um trabalho Code Engine para receber eventos Kafka do console
- Criar um trabalho Code Engine para atuar como consumidor de eventos de Kafka mensagens e receber os eventos Kafka. Por exemplo, crie uma tarefa chamada “
kafka-receiver-job” que utilize a imagem de exemplo “icr.io/codeengine/codeengine”. Esta imagem foi criada a partir decodeengine.go, disponível no repositório “Samples for IBM Cloud Code Engine ” GitHub. Esta amostra não requer nenhuma variável de ambiente. - Depois de criar este trabalho, confirme se ele está em
readystatus.
Ao usar o console, não é necessário que o aplicativo ou a tarefa que você utiliza para receber eventos do tipo “ Kafka ” já exista antes de criar a assinatura do evento “ Kafka ”. No entanto, se o app ou job não existir quando você cria a assinatura do evento, o status da assinatura reflete que o consumidor não existe. Você deve criar o app ou tarefa antes que a assinatura esteja em um estado pronto e possa receber eventos por meio desta assinatura.
Criando uma assinatura de eventos Code Engine Kafka para um trabalho a partir do console
A assinatura de eventos do Kafka define a relação entre o produtor (remetente) Kafka e o consumidor (destinatário) de eventos.
Antes de Iniciar
- Determine o projeto Code Engine que você deseja usar e certise-se de que este projeto esteja selecionado. Veja Criar e trabalhar com um projeto.
Siga as etapas a seguir para criar uma assinatura de eventos do Kafka para um aplicativo a partir do console.
- Na página “Projetos” do Code Engine, acesse o seu projeto.
- A partir da página Visão Geral, clique em Assinaturas de eventos.
- A partir da página de Assinaturas de eventos, clique em Criar para criar sua assinatura.
- A partir da página Criar uma assinatura de eventos, selecione o tile
Event Streams / Kafkapara especificar o tipo de evento. - Para Geral, forneça um nome para a assinatura
Event Streams / Kafka. Clique em Avançar para continuar. - Para obter detalhes sobre o Message Broker,
- Especifique os hosts do broker de mensagens do Kafka para as filas de mensagens das quais as mensagens são recebidas como eventos por meio desta assinatura. Para obter informações sobre os hosts do corretor, tópicos e credenciais de
acesso, visualize os detalhes da credencial de serviço para sua instância de serviço no console Event Streams. Por exemplo, especifique
"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"para os hosts do intermediário de mensagens para a instância de serviçomyeventstream-key. - Clique em Configurar para configurar o acesso ao intermediário de mensagens. Para autenticar a partir de Code Engine para a sua instância Kafka ou Event Streams, é necessário fornecer um segredo de acesso a um intermediário
de mensagens.
- Você pode criar um novo segredo, escolher um segredo existente ou se as credenciais não forem necessárias para acessar os intermediários de mensagens, então escolha
None. - Para criar um segredo, clique em Criar. Forneça um nome para o segredo, e valores para
usernameepassword. Os valores parausernameepassworddevem corresponder aos valores nas credenciais de serviço para a instância Kafka ou Event Streams. Por exemplo, o valor parausernameé o valor deuserque é listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. O valor parapasswordé o valor deapikeyque é listado nos detalhes das credenciais de serviço na instância de serviço Event Streams. - Para este exemplo, use o segredo existente
kafka-subscription-secretque foi criado anteriormente.
- Você pode criar um novo segredo, escolher um segredo existente ou se as credenciais não forem necessárias para acessar os intermediários de mensagens, então escolha
- Especificar o nome de tópicos existentes para as filas de mensagens. Por exemplo,
kafka-topic1. Para obter informações sobre os tópicos existentes para a sua instância de serviço, acesse sua instância de serviço no console Event Streams e visualize Topics. - (Opcional) Especificar um grupo de consumidores. Os consumidores de mensagens Kafka podem ser agrupados em grupos de consumidores. Se você estiver usando grupos de consumidores, a configuração de tópico controla o fluxo de mensagens para os consumidores no grupo de consumidores. Sempre que um consumidor é adicionado ou removido de um grupo de consumidores, o fluxo de mensagens a partir desse tópico pode mudar. Essa ação pode fazer com que os consumidores existentes não recebam mais mensagens desse tópico.
- Clique em Avançar para continuar.
- Especifique os hosts do broker de mensagens do Kafka para as filas de mensagens das quais as mensagens são recebidas como eventos por meio desta assinatura. Para obter informações sobre os hosts do corretor, tópicos e credenciais de
acesso, visualize os detalhes da credencial de serviço para sua instância de serviço no console Event Streams. Por exemplo, especifique
- Para o consumidor de eventos, especifique a tarefa “ Code Engine ” para receber eventos. Perceba que você pode escolher a partir de uma lista de trabalhos e apps definidos, ou você pode fornecer um nome para um job (ou
app) que ainda não está criado. Não é necessário que o app ou o job existam quando você cria a assinatura do evento com o console. No entanto, quando a assinatura é criada, o status da assinatura reflete que o consumidor não existe.
Você deve criar a tarefa (ou app) antes que a assinatura esteja em um estado pronto e possa receber eventos por meio desta assinatura. Para este exemplo, selecione
jobcomo o tipo de componente, e use o jobkafka-receiver-jobque referencia a imagemicr.io/codeengine/codeenginecomo o componente para receber eventos. Se o seu trabalho ainda não existir, forneça o nome dele e crie-o após criar a assinatura do Kafka. Apenas para aplicativos, é possível especificar opcionalmente um caminho. Clique em Avançar para continuar. - Para resumir, verifique as configurações da sua assinatura de eventos do Kafka e faça as alterações necessárias, se for o caso. Quando estiver pronto, clique em “Criar” para criar a assinatura do “ Kafka ”.
Como enviar eventos para a tarefa de recebimento a partir do console
Agora que sua assinatura de eventos Kafka, que faz referência à tarefa kafka-receiver-job, foi criada, use o kafka-sender-app para enviar eventos de mensagem à tarefa receptora.
-
Inicie a criação de logs para a tarefa do receptor para visualizar logs de tarefas do console para ver eventos.
-
(opcional) Inicie a criação de logs para o aplicativo do remetente para visualizar logs do aplicativo a partir do console para ver informações sobre eventos enviados.
-
Depois que o registro em log for iniciado, chame o aplicativo
kafka-sender-appcomcurle especifique o URL público dokafka-sender-app, o nome do seu tópico e o número de mensagens a serem enviadas. Você pode obter o URL público desse aplicativo na guia Domain mappings (Mapeamentos de domínio ) do seu aplicativo. Por exemplo,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
Certifique-se de agrupar o valor para curl entre aspas para garantir que ele seja tratado como uma única string.
Quando sua assinatura Kafka é criada com um intermediário, tópicos e um segredo de acesso que são válidos, e você tem um job Kafka que produz mensagens naquele tópico (como kafka-sender-app), então você pode ver eventos em logs
para o seu Code Engine job que recebe mensagens Kafka, como kafka-receiver-job. Ao utilizar a tarefa do receptor Kafka (icr.io/codeengine/codeengine), procure por CE_DATA nos logs para que o job receiver
veja as mensagens recebidas.
Inscrição em eventos do tipo “ Kafka ” para um trabalho com a CLI
Você pode usar a CLI para configurar uma assinatura de eventos do Kafka, de modo que os eventos sejam enviados para uma tarefa do Code Engine.
Ao criar uma assinatura de evento para uma tarefa, uma execução de tarefa é criada para cada evento que é acionado. Essa execução de tarefa tem as variáveis de ambiente que estão relacionadas ao job. A assinatura do evento “ Code Engine ” ( Kafka ) se conecta ao seu broker de mensagens Kafka e envia variáveis de ambiente relacionadas ao trabalho. Para obter mais informações sobre as variáveis de ambiente enviadas pelo Kafka, consulte Variáveis de ambiente para eventos.
Criando um trabalho Code Engine para receber eventos Kafka com a CLI
Antes de Iniciar
-
Criar um trabalho Code Engine para atuar como consumidor de eventos de Kafka mensagens e receber os eventos Kafka. Por exemplo, crie uma tarefa que seja chamada
kafka-receiver-jobe que use a imagemicr.io/codeengine/codeengine. Esta imagem foi criada a partir decodeengine.go, disponível no repositório “Samples for IBM Cloud Code Engine ” GitHub.ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine -
(opcional) Depois de criar esse trabalho, execute o comando
job getpara visualizar informações sobre este trabalho.ibmcloud ce job get -n kafka-receiver-job
Criando uma assinatura de eventos Code Engine Kafka para um trabalho com a CLI
É possível criar uma assinatura de evento do Kafka — que define a relação entre o produtor (remetente) e o consumidor (destinatário) de eventos do Kafka — por meio da CLI.
-
Crie uma assinatura de eventos Code Engine Kafka para os seus eventos Kafka usando o comando
ibmcloud ce sub kafka create. Use o segredokafka-subscription-secretque você criou anteriormente para acessar o intermediário de mensagens. Especifique as informações do intermediário com base nas informações de credenciais de serviço para o seu recurso Kafka. Para este exemplo, é possível obter as informações do intermediário a partir da saída do comandoibmcloud resource service-key myeventstream-key. Observe que você deve especificar uma opção--brokerpara cada intermediário para o seu tópico. A opção--destinationespecifica o recurso Code Engine que recebe os eventos. Ao trabalhar com uma tarefa de recebimento, você também deve especificar a opção--destination-typepara especificar o recurso é um job, já que o padrão para esta opção é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 -
Exibir os detalhes da assinatura do evento “ Kafka ”.
ibmcloud ce sub kafka get -n mykafkasubscription-withjobSaída de exemplo
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 [...]
Envio de eventos para a tarefa de recebimento com a CLI
Agora que sua assinatura de eventos Kafka, que faz referência ao aplicativo kafka-receiver-job, foi criada, use o kafka-sender-app para enviar eventos de mensagem ao aplicativo receptor.
-
Obtenha o URL público do aplicativo de destino,
kafka-sender-app, usando o comandoibmcloud ce app getpara localizar o endereço URL do seu aplicativo.ibmcloud ce app get -n kafka-sender-app --output urlSaída de exemplo
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
Execute o app de produtor de eventos Kafka,
kafka-sender-apppara enviar eventos para o trabalho de destino Code Engine. Ligue para o aplicativokafka-sender-appcomcurle especifique valores para o tópico e o número de mensagens. Use a saída do comandoibmcloud ce app getpara localizar o site público URL de seu aplicativo de produção de eventos. Certifique-se de agrupar o valor para curl entre aspas para garantir que ele seja tratado como uma única string. Por exemplo,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"Por exemplo,
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
Visualizar eventos em logs. Quando a sua assinatura de eventos Kafka é criada com um intermediário, tópicos e um segredo de acesso que são válidos, e você tem um app Kafka que produz mensagens naquele tópico (como
kafka-sender-app), então você pode ver eventos em logs para o seu destino Code Engine job que recebe mensagens Kafka, comokafka-receiver-job. Para cada mensagem que é enviada usandocurl, o mesmo número de execuções de tarefas é acionado pelos eventos Kafka. Para visualizar os eventos enviados a jobs, use o comandoibmcloud ce jobrun logs.- Use o comando
ibmcloud ce jobrun listpara listar a execução do job para o jobkafka-receiver-job.
ibmcloud ce jobrun list --job kafka-receiver-job ``` 2. Use o comando **`ibmcloud ce jobrun logs`** para obter os logs para uma execução de tarefa específica. ```txt {: pre} ibmcloud ce jobrun logs -n kafka-receiver-job-abcde ``` Saída de exemplo ```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 ``` Ao utilizar a tarefa do receptor Kafka (`icr.io/codeengine/codeengine`), procure por `CE_DATA` nos logs para que o job receiver veja as mensagens recebidas. Observe que as informações de log relativas à execução de tarefas permanecem armazenadas por apenas uma hora. Para obter mais informações sobre visualização de logs para apps ou empregos, consulte [Visualizando logs](/docs/codeengine?topic=codeengine-logging). - Use o comando
Variáveis de ambiente para eventos do Kafka que são transmitidos aos trabalhos
Todos os eventos que são entregues a uma tarefa são recebidos como variáveis de ambiente. Essas variáveis de ambiente incluem o prefixo CE_ e seguem a especificação CloudEvents.
Cada evento contém algumas variáveis de ambiente comuns que aparecem sempre que o evento é entregue a uma tarefa. O conjunto real de variáveis em cada evento pode incluir mais opções. Para obter mais informações, consulte os atributos do CloudEvent .
A tabela a seguir descreve as variáveis de ambiente específicas dos eventos do Kafka.
| Variável | Descrição |
|---|---|
CE_DATA |
Os dados (corpo) do evento. |
CE_DOMAIN |
A parte do nome de domínio da URL do aplicativo (e do projeto). |
CE_ID |
Um identificador exclusivo para o evento, a menos que um evento seja reproduzido. Nesse caso, ele é designado com o mesmo ID. |
CE_SOURCE |
Uma referência de URI que indica de que local esse evento teve origem dentro do produtor de evento. Para os eventos Kafka, este cabeçalho está no seguinte formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME]. |
CE_SPECVERSION |
A versão da especificação CloudEvents. Esse valor é sempre 1.0. |
CE_SUBDOMAIN |
A parte do subdomínio da URL associada ao aplicativo (e projeto). Se você estiver familiarizado com o Kubernetes, CE_SUBDOMAIN mapeará para o namespace do Kubernetes associado ao seu projeto. |
CE_SUBJECT |
O número de partição Kafka e deslocamento. Por exemplo, partition:0#1 refere-se à partição 0 e deslocamento 1. |
CE_TIME |
O horário no qual o evento foi gerado. |
CE_TYPE |
O tipo do evento. Para os eventos Kafka, este é dev.knative.kafka.event. |
Saída de exemplo
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
Visualizando e atualizando as inscrições de eventos Kafka
Você pode visualizar detalhes sobre sua assinatura do evento “ Kafka ” ou atualizá-la.
Visualizando e Atualizando as Assinaturas de Eventos Kafka a partir do console
-
Para visualizar informações sobre suas inscrições em eventos
- Na página “Projetos” do Code Engine, acesse o seu projeto.
- A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.
-
Para atualizar uma assinatura de evento
- Acesse a página de assinaturas. Para navegar até a sua página de assinatura, acesse a página de inscrições do Evento e clique no nome da assinatura que deseja atualizar.
- Atualize a assinatura. Por exemplo, altere o tópico para uma assinatura Kafka para um tópico diferente. A partir da guia Message broker details, remova o tópico existente da seção Topics e inclua o nome do seu novo tópico.
- Clique em Salvar para salvar suas mudanças.
Visualizando e atualizando as inscrições de eventos Kafka com a CLI
-
Para visualizar informações sobre suas inscrições de eventos com a CLI, use o comando
ibmcloud ce subscription kafka get.ibmcloud ce sub kafka get -n mykafkasubscriptionSaída de exemplo
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 -
Para atualizar uma assinatura de evento com a CLI, use o comando
ibmcloud ce subscription kafka update. O exemplo a seguir atualiza o nome do tópico.ibmcloud ce sub kafka update -n mykafkasubscription --topic kafka-topic2Você pode usar o
ibmcloud ce subscription kafka updatecomando para atualizar os valores da assinatura do Kafka. No entanto, não é possível modificar o valor para o grupo de consumidores com este comando. Se você quiser atualizar a assinatura para referenciar um tópico diferente, certifique-se de que o tópico Kafka exista antes de atualizar a assinatura.
Como excluir uma assinatura de evento Kafka
Quando você não precisar mais da assinatura do Kafka, poderá excluí-la.
Ao excluir uma assinatura, as credenciais do serviço da instância do serviço Event Streams são utilizadas para remover grupos de consumidores da instância do serviço Event Streams. Se a credencial do serviço já tiver sido excluída ou se estiver inválida no momento em que você excluir a assinatura, os grupos de consumidores não poderão ser removidos da instância do serviço “ Event Streams ”. Sua solicitação de exclusão da assinatura do evento “ Code Engine ” ( Kafka ) falhou.
Excluindo uma assinatura do Kafka do console
- Na página “Projetos” do Code Engine, acesse o seu projeto.
- A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.
- Na lista de assinaturas, exclua a assinatura que deseja remover de seu aplicativo ou tarefa.
Se você excluir um app ou uma tarefa que esteja associado à assinatura, a assinatura não será excluída. Se você recriar o aplicativo ou tarefa (ou outro app ou tarefa com o mesmo nome), sua assinatura se reconectará ao app ou tarefa.
Exclusão de uma assinatura do Kafka usando a CLI
É possível excluir uma assinatura do Kafka executando o ibmcloud ce subscription kafka delete comando.
Por exemplo, use o comando a seguir para excluir uma assinatura do Kafka chamada mykafkasubscription,
ibmcloud ce subscription kafka delete --name mykafkasubscription
Se você excluir um app ou uma tarefa que esteja associado à assinatura, a assinatura não será excluída. Em vez disso, ele se move para o estado pronto de false porque a assinatura depende da disponibilidade do app ou da tarefa.
Se você recriar o aplicativo ou tarefa (ou outro app ou tarefa com o mesmo nome), sua assinatura se reconectará e o estado Pronto será true.
Definindo atributos de eventos adicionais
Ao criar uma assinatura, será possível definir atributos CloudEvent adicionais para serem incluídos em quaisquer eventos gerados. Esses atributos aparecem semelhantes a qualquer outro atributo CloudEvent na entrega
do evento. Se você optar por especificar o nome de um atributo CloudEvent existente, ele substituirá o valor original que foi incluído no evento.
Para definir atributos adicionais, utilize as opções --extension com o ibmcloud ce subscription kafka create comando
da CLI.
Para obter mais informações, consulte É possível usar outras especificações CloudEvents?