Replicar mensagens do Pub/Sub para o Kafka

Este tutorial mostra como ingerir mensagens do Pub/Sub no cluster do Serviço Gerenciado para Apache Kafka usando o Kafka Connect.

O Kafka Connect gerencia a movimentação de dados entre o cluster do Kafka e outros sistemas. Neste tutorial, você vai criar um cluster do Connect e um conector de origem do Pub/Sub. O conector de origem do Pub/Sub lê mensagens do seu tópico do Pub/Sub e as grava em um tópico do Kafka.

Antes de começar

Console

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Verifique se você tem os seguintes papéis no projeto: Editor de cluster do Kafka gerenciado, Editor de cluster do Kafka Connect gerenciado, Editor de conector Kafka gerenciado, Editor de tópico do Kafka gerenciado, Editor do Pub/Sub

    Verificar os papéis

    1. No console do Google Cloud , acesse a página IAM.

      Acessar IAM
    2. Selecione o projeto.
    3. Na coluna Principal, encontre todas as linhas que identificam você ou um grupo no qual você está incluído. Para saber em quais grupos você está incluído, entre em contato com o administrador.

    4. Em todas as linhas que especificam ou incluem você, verifique a coluna Papel para ver se a lista de papéis inclui os papéis necessários.

    Conceder os papéis

    1. No console do Google Cloud , acesse a página IAM.

      Acessar IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos principais, digite seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.

    5. Clique em Selecionar um papel e pesquise o papel.
    6. Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
    7. Clique em Salvar.

gcloud

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.

  3. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Crie ou selecione um Google Cloud projeto.

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
    • Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto Google Cloud que você está criando.

    • Selecione o projeto Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  6. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  7. Ative a API Managed Kafka:

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    gcloud services enable managedkafka.googleapis.com
  8. Instale a CLI do Google Cloud.

  9. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Crie ou selecione um Google Cloud projeto.

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
    • Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto Google Cloud que você está criando.

    • Selecione o projeto Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  12. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  13. Ative a API Managed Kafka:

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    gcloud services enable managedkafka.googleapis.com
  14. Atribua papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor, roles/managedkafka.topicEditor, roles/pubsub.editor

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Substitua:

    • PROJECT_ID: o ID do projeto.
    • USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo, myemail@example.com.
    • ROLE: o papel do IAM concedido à sua conta de usuário.

Criar um tópico e uma assinatura do Pub/Sub

Nesta etapa, você vai criar um tópico do Pub/Sub com uma assinatura.

Console

  1. Acesse a página Pub/Sub > Tópicos.

    Acesse Tópicos

  2. Clique em Criar tópico.

  3. Na caixa ID do tópico, insira um nome para o tópico.

  4. Verifique se a caixa de seleção Adicionar uma assinatura padrão está marcada.

  5. Clique em Criar.

gcloud

  1. Para criar um tópico do Pub/Sub, execute o comando gcloud pubsub topics create.

    gcloud pubsub topics create TOPIC_ID
    

    Substitua TOPIC_ID por um nome para seu tópico do Pub/Sub.

  2. Para criar uma assinatura no seu tópico, execute o comando gcloud pubsub subscriptions create:

    gcloud pubsub subscriptions create --topic TOPIC_ID SUBSCRIPTION_ID
    

    Substitua SUBSCRIPTION_ID por um nome para sua assinatura do Pub/Sub.

Para informações sobre como nomear tópicos e assinaturas do Pub/Sub, consulte Diretrizes para nomear um tópico ou uma assinatura.

Criar recursos do Serviço gerenciado para Apache Kafka

Nesta seção, você vai criar os seguintes recursos do Serviço Gerenciado para Apache Kafka:

  • Um cluster do Kafka com um tópico.
  • Um cluster do Connect com um conector do Pub/Sub.

Criar um cluster do Kafka

Nesta etapa, você cria um cluster do Serviço Gerenciado para Apache Kafka. A criação de um cluster pode levar até 30 minutos.

Console

  1. Acesse a página Clusters do Serviço Gerenciado para Apache Kafka >.

    Acessar Clusters

  2. Clique em Criar.
  3. Na caixa Nome do cluster, insira um nome para o cluster.
  4. Na lista Região, selecione um local para o cluster.
  5. Em Configuração de rede, configure a sub-rede em que o cluster está acessível:
    1. Em Projeto, selecione o projeto.
    2. Em Rede, selecione a rede VPC.
    3. Em Sub-rede, selecione a sub-rede.
    4. Clique em Concluído.
  6. Clique em Criar.

Depois de clicar em Criar, o estado do cluster será Creating. Quando o cluster estiver pronto, o estado será Active.

gcloud

Para criar um cluster do Kafka, execute o comando managed-kafka clusters create.

gcloud managed-kafka clusters create KAFKA_CLUSTER \
--location=REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
--async

Substitua:

  • KAFKA_CLUSTER: um nome para o cluster do Kafka
  • REGION: o local do cluster
  • PROJECT_ID: ID do projeto;
  • SUBNET_NAME: a sub-rede em que você quer criar o cluster, por exemplo, default

Para informações sobre os locais com suporte, consulte Locais do serviço gerenciado para Apache Kafka.

O comando é executado de forma assíncrona e retorna um ID de operação:

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

Para acompanhar o progresso da operação de criação, use o comando gcloud managed-kafka operations describe:

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

Quando o cluster estiver pronto, a saída desse comando vai incluir a entrada state: ACTIVE. Para mais informações, consulte Monitorar a operação de criação de cluster.

Criar um tópico do Kafka

Depois que o cluster do Serviço Gerenciado para Apache Kafka for criado, crie um tópico do Kafka.

Console

  1. Acesse a página Clusters do Serviço Gerenciado para Apache Kafka >.

    Acessar Clusters

  2. Clique no nome do cluster.

  3. Na página de detalhes do cluster, clique em Criar tópico.

  4. Na caixa Nome do tópico, insira um nome para o tópico.

  5. Clique em Criar.

gcloud

Para criar um tópico do Kafka, execute o comando managed-kafka topics create.

gcloud managed-kafka topics create KAFKA_TOPIC_NAME \
--cluster=KAFKA_CLUSTER \
--location=REGION \
--partitions=10 \
--replication-factor=3

Substitua:

  • KAFKA_TOPIC_NAME: o nome do tópico do Kafka a ser criado.
  • KAFKA_CLUSTER: o nome do cluster do Kafka.
  • REGION: a região em que você criou o cluster do Kafka

Criar um cluster do Connect

Nesta etapa, você vai criar um cluster do Connect. A criação de um cluster do Connect pode levar até 30 minutos.

Antes de iniciar esta etapa, verifique se o cluster do Serviço gerenciado para Apache Kafka foi totalmente criado.

Console

  1. Acesse a página Serviço Gerenciado para Apache Kafka > Clusters do Connect.

    Acessar o Connect Clusters

  2. Clique em Criar.

  3. Em Nome do cluster do Connect, insira uma string. Por exemplo: my-connect-cluster.

  4. Em Cluster principal do Kafka, selecione o Kafka que você criou anteriormente.

  5. Clique em Criar.

Enquanto o cluster está sendo criado, o estado dele é Creating. Quando o cluster terminar de ser criado, o estado será Active.

gcloud

Para criar um cluster do Connect, execute o comando gcloud managed-kafka connect-clusters create.

gcloud managed-kafka connect-clusters create CONNECT_CLUSTER \
  --location=REGION \
  --cpu=12 \
  --memory=12GiB \
  --primary-subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
  --kafka-cluster=KAFKA_CLUSTER \
  --async

Substitua:

  • CONNECT_CLUSTER: um nome para o cluster do Connect.
  • REGION: a região em que você criou o cluster do Kafka
  • PROJECT_ID: ID do projeto;
  • SUBNET_NAME: a sub-rede em que você criou o cluster do Kafka.
  • KAFKA_CLUSTER: o nome do cluster do Kafka.

O comando é executado de forma assíncrona e retorna um ID de operação:

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

Para acompanhar o progresso da operação de criação, use o comando gcloud managed-kafka operations describe:

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

Para mais informações, consulte Monitorar a operação de criação do cluster.

Conceder papéis do IAM

Conceda os seguintes papéis do Identity and Access Management (IAM) à conta de serviço do Managed Kafka:

  • Assinante do Pub/Sub
  • Leitor do Pub/Sub

Essas funções permitem que os conectores leiam mensagens do Pub/Sub.

Console

  1. No console do Google Cloud , acesse a página IAM.

    Acessar IAM

  2. Selecione Incluir concessões de papel fornecidas pelo Google.

  3. Encontre a linha da conta de serviço do Kafka gerenciado e clique em Editar principal.

  4. Clique em Adicionar outro papel e selecione Assinante do Pub/Sub. Repita essa etapa para o papel Leitor do Pub/Sub.

  5. Clique em Salvar.

Para mais informações sobre como conceder papéis, consulte Conceder um papel do IAM usando o console.

gcloud

Para conceder papéis do IAM à conta de serviço, execute o comando gcloud projects add-iam-policy-binding.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
    --role=roles/pubsub.subscriber

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
    --role=roles/pubsub.viewer

Substitua:

  • PROJECT_ID: ID do projeto;
  • PROJECT_NUMBER: o ID do seu projeto

Para encontrar o número do projeto, use o comando gcloud projects describe.

Criar um conector de origem do Pub/Sub

Nesta etapa, você cria um conector de origem do Pub/Sub. Esse conector lê mensagens do Pub/Sub e as grava em um tópico do Kafka.

Console

  1. Acesse a página Serviço Gerenciado para Apache Kafka > Clusters do Connect.

    Acessar o Connect Clusters

  2. Clique no nome do cluster do Connect.

  3. Clique em Criar conector.

  4. Em Nome do conector, insira uma string. Exemplo: pubsub-source.

  5. Na lista Plug-in do conector, selecione Pub/Sub Source.

  6. Em Inscrição do Cloud Pub/Sub, selecione o Pub/Sub padrão criado quando você criou o tópico do Pub/Sub.

  7. Em Tópico do Kafka, selecione o tópico que você criou anteriormente.

  8. Clique em Criar.

gcloud

Para criar um conector de origem do Pub/Sub, execute o comando gcloud managed-kafka connectors create.

gcloud managed-kafka connectors create PUBSUB_CONNECTOR_NAME \
  --connect-cluster=CONNECT_CLUSTER \
  --location=REGION \
  --configs=connector.class=com.google.pubsub.kafka.source.CloudPubSubSourceConnector,\
cps.project=PROJECT_ID,\
cps.streamingPull.enabled=true,\
cps.subscription=SUBSCRIPTION_ID,\
kafka.topic=KAFKA_TOPIC_NAME,\
key.converter=org.apache.kafka.connect.storage.StringConverter,\
tasks.max=3,\
value.converter=org.apache.kafka.connect.converters.ByteArrayConverter

Substitua:

  • PUBSUB_CONNECTOR_NAME: um nome para o conector, como pubsub-source-connector
  • CONNECT_CLUSTER: o nome do cluster do Connect
  • REGION: a região em que você criou o cluster do Connect
  • PROJECT_ID: ID do projeto;
  • KAFKA_TOPIC_NAME: o nome do seu tópico do Kafka
  • SUBSCRIPTION_ID: o nome da sua assinatura do Pub/Sub

Ver resultados

Para conferir os resultados, publique algumas mensagens no Pub/Sub.

Console

  1. No console Google Cloud , acesse a página Pub/Sub > Tópicos.

    Acesse Tópicos

  2. Na lista de tópicos, clique no nome do seu tópico do Pub/Sub.

  3. Clique em Mensagens.

  4. Clique em Publicar mensagens.

  5. Em Número de mensagens, insira 10.

  6. Em Corpo da mensagem, digite {"name": "Alice", "customer_id": 1}.

  7. Clique em Publicar.

gcloud

Para publicar mensagens no seu tópico do Pub/Sub, use o comando gcloud pubsub topics publish.

for run in {1..10}; do
  gcloud pubsub topics publish TOPIC_ID --message='{"name": "Alice", "customer_id": 1}'
done

Substitua TOPIC_ID pelo nome do seu tópico do Pub/Sub.

Agora você pode consumir as mensagens do tópico do Kafka. Para mais informações, consulte Produzir e consumir mensagens com a CLI.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Console

  1. Exclua o tópico do Pub/Sub.

    1. Acesse a página Pub/Sub > Tópicos.

      Acesse Tópicos

    2. Selecione o tópico e clique em Excluir.

  2. Exclua a assinatura do Pub/Sub.

    1. Acesse a página Pub/Sub > Assinaturas.

      Acessar "Assinaturas"

    2. Selecione a assinatura criada com seu tópico e clique em Excluir.

  3. Exclua o cluster do Connect.

    1. Acesse a página Serviço Gerenciado para Apache Kafka > Clusters do Connect.

      Acessar o Connect Clusters

    2. Selecione o cluster do Connect e clique em Excluir.

  4. Exclua o cluster do Kafka.

    1. Acesse a página Clusters do Serviço Gerenciado para Apache Kafka >.

      Acessar Clusters

    2. Selecione o cluster do Kafka e clique em Excluir.

gcloud

  1. Para excluir a assinatura e o tópico do Pub/Sub, use os comandos gcloud pubsub subscriptions delete e gcloud pubsub topics delete.

    gcloud pubsub subscriptions delete SUBSCRIPTION_ID
    gcloud pubsub topics delete TOPIC_ID
    
  2. Para excluir o cluster do Connect, use o comando gcloud managed-kafka connect-clusters delete.

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=REGION --async
    
  3. Para excluir o cluster do Kafka, use o comando gcloud managed-kafka clusters delete.

    gcloud managed-kafka clusters delete KAFKA_CLUSTER \
      --location=REGION --async
    

A seguir