Desarrolla una aplicación de productor de Java
Aprende a desarrollar una aplicación de productor de Java que se autentique con un clúster de Managed Service para Apache Kafka mediante las credenciales predeterminadas de la aplicación (ADC). ADC permite que las aplicaciones que se ejecutan en Google Cloud encuentren y usen automáticamente las credenciales correctas para autenticarse en los Google Cloud servicios.
Antes de comenzar
Antes de comenzar este instructivo, crea un clúster nuevo de Managed Service para Apache Kafka. Si ya tienes un clúster, puedes omitir este paso.
Cómo crear un clúster
Console
- Ve a la página Managed Service para Apache Kafka > Clústeres.
- Haz clic en Crear.
- En el cuadro Nombre del clúster, ingresa un nombre para el clúster.
- En la lista Región, selecciona una ubicación para el clúster.
-
En Configuración de red, configura la subred en la que se puede acceder al clúster:
- En Proyecto, selecciona tu proyecto.
- En Red, selecciona la red de VPC.
- En Subred, selecciona la subred.
- Haz clic en Listo.
- Haz clic en Crear.
Después de hacer clic en Crear, el estado del clúster es Creating. Cuando el clúster
esté listo, el estado será Active.
gcloud
Para crear un clúster de Kafka, ejecuta el
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
Reemplaza lo siguiente:
KAFKA_CLUSTER: un nombre para el clúster de KafkaREGION: la ubicación del clústerPROJECT_ID: Es el ID del proyecto.SUBNET_NAME: la subred en la que deseas crear el clúster, por ejemplo,default
Para obtener información sobre las ubicaciones admitidas, consulta Ubicaciones de Managed Service para Apache Kafka.
El comando se ejecuta de forma asíncrona y muestra un ID de operación:
Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.
Para hacer un seguimiento del progreso de la operación de creación, usa el
gcloud managed-kafka
operations describe comando:
gcloud managed-kafka operations describe OPERATION_ID \ --location=REGION
Cuando el clúster esté listo, el resultado de este comando incluirá la entrada state:
ACTIVE. Para obtener más información, consulta
Supervisa la
operación de creación del clúster.
Roles obligatorios
Para obtener los permisos que necesitas para crear y configurar una VM de cliente, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:
- Administrador de instancias de Compute (v1) (
roles/compute.instanceAdmin.v1) - Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin) - Visualizador de roles (
roles/iam.roleViewer) - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Crear una VM de cliente
Crea una instancia de máquina virtual (VM) de Linux en Compute Engine que pueda acceder al clúster de Kafka. Cuando configures la VM, establece las siguientes opciones:
Región. Crea la VM en la misma región que tu clúster de Kafka.
Subred. Crea la VM en la misma red de VPC que la subred que usaste en la configuración del clúster de Kafka. Para obtener más información, consulta Visualiza las subredes de un clúster.
Permisos de acceso. Asigna el
https://www.googleapis.com/auth/cloud-platformpermiso de acceso a la VM. Este permiso autoriza a la VM a enviar solicitudes a la API de Managed Kafka.
En los siguientes pasos, se muestra cómo establecer estas opciones.
Console
En la Google Cloud consola, dirígete a la página Crear una instancia.
En el panel Configuración de la máquina, haz lo siguiente:
En el campo Nombre, especifica un nombre para tu instancia. Para obtener más información, consulta Convención de asignación de nombres de recursos.
En la lista Región, selecciona la misma región que tu clúster de Kafka.
En la lista Zona, selecciona una zona.
En el menú de navegación, haz clic en Herramientas de redes. En el panel Herramientas de redes que aparece, haz lo siguiente:
Ve a la sección Interfaces de red.
Para expandir la interfaz de red predeterminada, haz clic en la flecha.
En el campo Red, elige la red de VPC.
En la lista Subred, selecciona la subred.
Haz clic en Listo.
En el menú de navegación, haz clic en Seguridad. En el panel Seguridad que aparece, haz lo siguiente:
En Permisos de acceso, selecciona Establecer acceso para cada API.
En la lista de permisos de acceso, busca la lista desplegable Cloud Platform y selecciona Habilitada.
Haz clic en Crear para crear la VM.
gcloud
Para crear la instancia de VM, usa el
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
Reemplaza lo siguiente:
- VM_NAME: El nombre de la VM
- PROJECT_ID: Es el ID del proyecto.
- REGION: La región en la que creaste el clúster de Kafka
, por ejemplo,
us-central1 - SUBNET: Una subred en la misma red de VPC que la subred que usaste en la configuración del clúster
- ZONE: una zona en la región en la que creaste el
clúster, por ejemplo,
us-central1-c
Para obtener más información sobre cómo crear una VM, consulta Crea una instancia de VM en una subred específica.
Asigna roles de IAM
Otorga los siguientes roles de Identity and Access Management (IAM) a la cuenta de servicio predeterminada de Compute Engine:
- Cliente de Kafka administrado (
roles/managedkafka.client) - Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator) Creador de tokens de OpenID para cuentas de servicio (
roles/iam.serviceAccountOpenIdTokenCreator)
Console
En la Google Cloud consola de, dirígete a la página IAM.
Busca la fila de la cuenta de servicio predeterminada de Compute Engine y haz clic en Editar principal.
Haz clic en Agregar otro rol y selecciona el rol Cliente de Kafka administrado. Repite este paso para los roles Creador de tokens de cuenta de servicio y Creador de tokens de OpenID para cuentas de servicio.
Haz clic en Guardar.
gcloud
Para otorgar roles de IAM, usa el
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
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto.
PROJECT_NUMBER: Es el número de tu proyecto.
Para obtener el número de proyecto, ejecuta el
gcloud projects describe comando:
gcloud projects describe PROJECT_ID
Para obtener más información, consulta Encuentra el nombre, el número y el ID del proyecto.
Conéctate a la VM
Usa SSH para conectarte a la instancia de VM.
Console
Ve a la página Instancias de VM.
En la lista de instancias de VM, busca el nombre de la VM y haz clic en SSH.
gcloud
Para conectarte a la VM, usa el
gcloud compute ssh comando.
gcloud compute ssh VM_NAME \
--project=PROJECT_ID \
--zone=ZONE
Reemplaza lo siguiente:
- VM_NAME: El nombre de la VM
- PROJECT_ID: Es el ID del proyecto.
- ZONE: La zona en la que creaste la VM
Es posible que se requiera configuración adicional para el uso de SSH por primera vez. Para obtener más información, consulta Acerca de las conexiones SSH.
Configura un proyecto de Apache Maven
Desde tu sesión de SSH, ejecuta los siguientes comandos para configurar un proyecto de Maven.
Instala Java y Maven con el comando:
sudo apt-get install maven openjdk-17-jdk.Configura un proyecto de Apache Maven.
Este comando creará un paquete
com.google.exampleen un directorio llamadodemo.mvn archetype:generate -DartifactId=demo -DgroupId=com.google.example\ -DarchetypeArtifactId=maven-archetype-quickstart\ -DarchetypeVersion=1.5 -DinteractiveMode=falseCambia al directorio del proyecto con
cd demo.
Crea una aplicación de productor de Java
En esta sección, se te guiará para crear una aplicación de Java que produzca mensajes en un tema de Kafka. Escribe y compila código Java con Maven, configura los parámetros necesarios en un archivo kafka-client.properties y, luego, ejecuta tu aplicación para enviar mensajes.
Escribe el código del productor
Reemplaza el código en src/main/java/com/google/example/App.java por lo siguiente:
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();
}
}
Compila la aplicación
Para compilar esta aplicación, necesitas paquetes relacionados con los clientes de Kafka en general y la lógica de autenticación específica para Google Cloud.
En el directorio del proyecto de demostración, encontrarás
pom.xmlcon las configuraciones de Maven para este proyecto. Agrega las siguientes líneas a la<dependencies>sección 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>Compila la aplicación con
mvn compile.
Configura y ejecuta la aplicación
Busca la dirección de arranque de tu clúster de Kafka siguiendo Visualiza la dirección de arranque de un clúster
El productor espera parámetros de configuración del cliente en un archivo llamado
kafka-client.properties. Crea este archivo en el directorio del proyecto de demostración (el directorio que contienepom.xml) con el siguiente contenido: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;Reemplaza
BOOTSTRAPpor la dirección del clúster, incluido el número de puerto.Ya puedes ejecutar la aplicación:
mvn exec:java -Dexec.mainClass="com.google.example.App" --quiet
Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu Google Cloud cuenta de por los recursos que usaste en esta página.
Console
Borra la instancia de VM.
Ve a la página Instancias de VM.
Selecciona la VM y haz clic en Borrar.
Borra el clúster de Kafka.
Ve a la página Managed Service para Apache Kafka > Clústeres.
Selecciona el clúster de Kafka y haz clic en Borrar.
gcloud
Para borrar la VM, usa el
gcloud compute instances deletecomando.gcloud compute instances delete VM_NAME --zone=ZONEPara borrar el clúster de Kafka, usa el
gcloud managed-kafka clusters deletecomando.gcloud managed-kafka clusters delete CLUSTER_ID \ --location=REGION --async