Desenvolver um aplicativo de produtor Java
Aprenda a desenvolver um aplicativo de produtor Java que se autentica com um cluster do serviço gerenciado para Apache Kafka usando Application Default Credentials (ADC). O ADC permite que aplicativos em execução em Google Cloud encontrem e usem automaticamente as credenciais certas para autenticar Google Cloud serviços.
Antes de começar
Antes de iniciar este tutorial, crie um novo cluster do serviço gerenciado para Apache Kafka. Se você já tiver um cluster, pule esta etapa.
Como criar um cluster
Console
- Acesse a página Serviço gerenciado para Apache Kafka > Clusters.
- Clique em Criar.
- Na caixa Nome do cluster, insira um nome para o cluster.
- Na lista Região, selecione um local para o cluster.
-
Em Configuração de rede, configure a sub-rede em que o cluster está acessível:
- Em Projeto, selecione o projeto.
- Em Rede, selecione a rede VPC.
- Em Sub-rede, selecione a sub-rede.
- Clique em Concluído.
- 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
managed-kafka clusters
create comando.
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 KafkaREGION: o local do clusterPROJECT_ID: ID do projetoSUBNET_NAME: a sub-rede em que você quer criar o cluster, por exemplo,default
Para informações sobre os locais compatíveis, 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
gcloud managed-kafka
operations describe comando:
gcloud managed-kafka operations describe OPERATION_ID \ --location=REGION
Quando o cluster estiver pronto, a saída desse comando incluirá a entrada state:
ACTIVE. Para mais informações, consulte
Monitorar a
operação de criação do cluster.
Funções exigidas
Para ter as permissões necessárias para criar e configurar uma VM cliente, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador da instância do Compute (v1) (
roles/compute.instanceAdmin.v1) - Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin) - Leitor de papel (
roles/iam.roleViewer) - Usuário da conta de serviço (
roles/iam.serviceAccountUser)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.
Criar uma VM cliente
Crie uma instância de máquina virtual (VM) do Linux no Compute Engine que possa acessar o cluster do Kafka. Ao configurar a VM, defina as seguintes opções:
Região. Crie a VM na mesma região do cluster do Kafka.
Sub-rede. Crie a VM na mesma rede VPC que a sub-rede usada na configuração do cluster do Kafka. Para mais informações, consulte Conferir as sub-redes de um cluster.
Escopos de acesso. Atribua o
https://www.googleapis.com/auth/cloud-platformescopo de acesso à VM. Esse escopo autoriza a VM a enviar solicitações para a API Managed Kafka.
As etapas a seguir mostram como definir essas opções.
Console
No Google Cloud console do, acesse a página Criar uma instância.
No painel Configuração da máquina, faça o seguinte:
No menu de navegação, clique em Rede. No painel Rede exibido, faça o seguinte:
Acesse a seção Interfaces de rede.
Para expandir a interface de rede padrão, clique na seta.
No campo Rede, escolha a rede VPC.
Na lista Sub-rede, selecione a sub-rede.
Clique em Concluído.
No menu de navegação, clique em Segurança. No painel Segurança exibido, faça o seguinte:
Para Escopos de acesso, selecione Definir acesso para cada API.
Na lista de escopos de acesso, encontre a lista suspensa Cloud Platform e selecione Ativado.
Clique em Criar para criar a VM.
gcloud
Para criar a instância de VM, use o
gcloud compute instances create
comando.
gcloud compute instances create VM_NAME \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET \
--zone=ZONE
Substitua:
- VM_NAME: o nome da VM
- PROJECT_ID: ID do projeto
- REGION: a região em que você criou o cluster do Kafka, por exemplo
us-central1 - SUBNET: uma sub-rede na mesma rede VPC que a sub-rede usada na configuração do cluster
- ZONE: uma zona na região em que você criou o
cluster, por exemplo
us-central1-c
Para mais informações sobre como criar uma VM, consulte Criar uma instância de VM em uma sub-rede específica.
Conceder papéis do IAM
Conceda os seguintes papéis do Identity and Access Management (IAM) à conta de serviço padrão do Compute Engine:
- Cliente Kafka gerenciado (
roles/managedkafka.client) - Criador do token da conta de serviço (
roles/iam.serviceAccountTokenCreator) Criador do token OpenID da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator)
Console
No Google Cloud console, acesse a página IAM.
Encontre a linha da conta de serviço padrão do Compute Engine e clique em Editar principal.
Clique em Adicionar outro papel e selecione o papel Cliente Kafka gerenciado. Repita essa etapa para os papéis Criador do token da conta de serviço e Criador do token OpenID da conta de serviço.
Clique em Salvar.
gcloud
Para conceder papéis do IAM, use o
gcloud projects add-iam-policy-binding
comando.
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role=roles/managedkafka.client
gcloud projects add-iam-policy-binding PROJECT_ID\
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role=roles/iam.serviceAccountTokenCreator
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role=roles/iam.serviceAccountOpenIdTokenCreator
Substitua:
PROJECT_ID: ID do projeto
PROJECT_NUMBER: o ID do seu projeto
Para receber o número do projeto, execute o
gcloud projects describe comando:
gcloud projects describe PROJECT_ID
Para mais informações, consulte Encontrar o nome, o número e o ID do projeto.
Conectar-se à VM
Use SSH para se conectar à instância de VM.
Console
Acesse a página Instâncias da VM.
Na lista de instâncias de VM, encontre o nome da VM e clique em SSH.
gcloud
Para se conectar à VM, use o
gcloud compute ssh comando.
gcloud compute ssh VM_NAME \
--project=PROJECT_ID \
--zone=ZONE
Substitua:
- VM_NAME: o nome da VM
- PROJECT_ID: ID do projeto
- ZONE: a zona em que você criou a VM
Pode ser necessária uma configuração extra para o uso do SSH pela primeira vez. Para mais informações, consulte Sobre conexões SSH.
Configurar um projeto do Apache Maven
Na sessão SSH, execute os comandos a seguir para configurar um projeto Maven.
Instale o Java e o Maven com o comando:
sudo apt-get install maven openjdk-17-jdk.Configure um projeto do Apache Maven.
Esse comando vai criar um pacote
com.google.exampleem um diretório chamadodemo.mvn archetype:generate -DartifactId=demo -DgroupId=com.google.example\ -DarchetypeArtifactId=maven-archetype-quickstart\ -DarchetypeVersion=1.5 -DinteractiveMode=falseMude para o diretório do projeto com
cd demo.
Criar um aplicativo de produtor Java
Esta seção orienta você na criação de um aplicativo Java que produz mensagens para um tópico do Kafka. Grave e compile o código Java usando o Maven, configure os parâmetros necessários em um arquivo kafka-client.properties e execute o aplicativo para enviar mensagens.
Escrever o código do produtor
Substitua o código em src/main/java/com/google/example/App.java pelo seguinte:
package com.google.example;
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.apache.kafka.clients.producer.Callback;
class SendCallback implements Callback {
public void onCompletion(RecordMetadata m, Exception e){
if (e == null){
System.out.println("Produced a message successfully.");
} else {
System.out.println(e.getMessage());
}
}
}
public class App {
public static void main(String[] args) throws Exception {
Properties p = new Properties();
p.load(new java.io.FileReader("kafka-client.properties"));
KafkaProducer producer = new KafkaProducer(p);
ProducerRecord message = new ProducerRecord("topicName", "key", "value");
SendCallback callback = new SendCallback();
producer.send(message,callback);
producer.close();
}
}
Compilar o aplicativo
Para compilar esse aplicativo, você precisa de pacotes relacionados aos clientes do Kafka em geral e à lógica de autenticação específica para Google Cloud.
No diretório do projeto de demonstração, você encontra
pom.xmlcom as configurações do Maven para esse projeto. Adicione as seguintes linhas à<dependencies>seção depom.xml.<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>com.google.cloud.hosted.kafka</groupId> <artifactId>managed-kafka-auth-login-handler</artifactId> <version>1.0.5</version> </dependency>Compile o aplicativo com
mvn compile.
Configurar e executar o aplicativo
Consulte o endereço de inicialização do cluster do Kafka seguindo Conferir o endereço de inicialização de um cluster
O produtor espera parâmetros de configuração do cliente em um arquivo chamado
kafka-client.properties. Crie esse arquivo no diretório do projeto de demonstração (o diretório que contémpom.xml) com o seguinte conteúdo:bootstrap.servers=BOOTSTRAP value.serializer=org.apache.kafka.common.serialization.StringSerializer key.serializer=org.apache.kafka.common.serialization.StringSerializer security.protocol=SASL_SSL sasl.mechanism=OAUTHBEARER sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;Substitua
BOOTSTRAPpelo endereço do cluster, incluindo o número da porta.Agora você já pode executar o aplicativo:
mvn exec:java -Dexec.mainClass="com.google.example.App" --quiet
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.
Console
Exclua a instância de VM.
Acesse a página Instâncias da VM.
Selecione a VM e clique em Excluir.
Exclua o cluster do Kafka.
Acesse a página Serviço gerenciado para Apache Kafka > Clusters.
Selecione o cluster do Kafka e clique em Excluir.
gcloud
Para excluir a VM, use o
gcloud compute instances deletecomando.gcloud compute instances delete VM_NAME --zone=ZONEPara excluir o cluster do Kafka, use o
gcloud managed-kafka clusters deletecomando.gcloud managed-kafka clusters delete CLUSTER_ID \ --location=REGION --async