Validación de esquemas para aplicaciones Apache Kafka mediante Avro (Java)
En esta guía de inicio rápido, exploramos cómo validar eventos de aplicaciones Apache Kafka mediante Azure Schema Registry para Event Hubs.
En este caso de uso, una aplicación productora de Kafka usa el esquema Avro almacenado en Azure Schema Registry para serializar el evento y publicarlo en un centro de temas o eventos de Kafka en Azure Event Hubs. El consumidor Kafka deserializa los eventos que consume de Event Hubs. Para ello usa el ID de esquema del evento y el esquema Avro, que se almacena en Azure Schema Registry.
Requisitos previos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
- Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- En su entorno de desarrollo, instale los siguientes componentes:
- Kit de desarrollo de Java (JDK) 1.7+.
- Descargue e instale un archivo binario de Maven.
- Git
- Clone el repositorio Azure Schema Registry for Kafka.
Creación de un centro de eventos
Siga las instrucciones del inicio rápido Creación de un espacio de nombres y un centro de eventos de Event Hubs para crear un espacio de nombres de Event Hubs y un centro de eventos. A continuación, para obtener una cadena de conexión al espacio de nombres de Event Hubs, siga las instrucciones que se indican en Obtención de una cadena de conexión.
Anote la siguiente configuración que usará en el inicio rápido actual:
- Cadena de conexión del espacio de nombres de Event Hubs
- Nombre del centro de eventos
Creación de un esquema
Siga las instrucciones que se indican en Creación de esquemas mediante el registro de esquema para crear un grupo de esquemas y un esquema.
Cree un grupo de esquemas denominado contoso-sg mediante el portal del registro de esquema. Use Avro como tipo de serialización y Ninguno como modo de compatibilidad.
En ese grupo de esquemas, cree un esquema de Avro con el nombre del esquema
Microsoft.Azure.Data.SchemaRegistry.example.Order
mediante el siguiente contenido de esquema.{ "namespace": "Microsoft.Azure.Data.SchemaRegistry.example", "type": "record", "name": "Order", "fields": [ { "name": "id", "type": "string" }, { "name": "amount", "type": "double" }, { "name": "description", "type": "string" } ] }
Registro de una aplicación para acceder al registro de esquemas
Puede usar Microsoft Entra ID para autorizar a su aplicación productora y consumidora de Kafka a acceder a los recursos de Azure Schema Registry registrando su aplicación cliente con un inquilino de Microsoft Entra desde el Azure Portal.
Para registrar una aplicación de Microsoft Entra denominada example-app
consulte Registro de la aplicación con un inquilino de Microsoft Entra.
- tenant.id: establece el Id. de inquilino de la aplicación
- client.id: establece el Id. de cliente de la aplicación
- client.secret: establece el secreto del cliente para la autenticación
Y si usa identidad administrada, necesitaría:
- use.managed.identity.credential: indica que se deben usar credenciales MSI, se deben usar para VM habilitadas para MSI
- managed.identity.clientId: si se especifica, crea credenciales MSI con el ID de cliente dado
- managed.identity.resourceId: si se especifica, crea la credencial MSI con el ID de recurso dado
Agregar usuario al rol Lector del registro de esquema
Agregue la cuenta de usuario al rol Lector del registro de esquema en el nivel de espacio de nombres. También puede usar el rol Colaborador del registro de esquema, pero no es necesario para este inicio rápido.
- En la página Espacio de nombres de Event Hubs, seleccione Control de acceso (IAM) en el menú de la izquierda.
- En la página Control de acceso (IAM), seleccione + Agregar ->Agregar asignación de roles en el menú.
- En la página Tipo de asignación, seleccione Siguiente.
- En la página Roles, seleccione Lector del registro de esquema (versión preliminar) y, a continuación, seleccione Siguiente en la parte inferior de la página.
- Use el enlace + Seleccionar miembros para agregar la aplicación
example-app
que creó en el paso anterior a la función y después seleccione Siguiente. - En la página Revisar + asignar, seleccione Revisar + asignar.
Actualización de la configuración de la aplicación cliente de las aplicaciones Kafka
Se debe actualizar la configuración de cliente de las aplicaciones productoras y consumidoras de Kafka con la configuración relacionada con la aplicación Microsoft Entra que creamos y la información del registro de esquemas.
Para actualizar la configuración del productor de Kafka, vaya a azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.
Actualizar la configuración de la aplicación Kafka en src/main/resources/app.properties mediante la guía de Inicio rápido de Kafka para Event Hubs.
Actualice los detalles de configuración para el productor en src/main/resources/app.properties mediante la configuración relacionada con el registro de esquemas y la aplicación Microsoft Entra que creó anteriormente como se indica a continuación:
schema.group=contoso-sg schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net tenant.id=<> client.id=<> client.secret=<>
Siga las mismas instrucciones y actualice también la configuración de azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.
Para las aplicaciones Kafka producer y consumer, se usa el siguiente esquema Avro:
{ "namespace": "com.azure.schemaregistry.samples", "type": "record", "name": "Order", "fields": [ { "name": "id", "type": "string" }, { "name": "amount", "type": "double" }, { "name": "description", "type": "string" } ] }
Uso del productor Kafka con validación de esquema Avro
Para ejecutar la aplicación Kafka producer, vaya a azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.
Puede ejecutar la aplicación productora para que produzca registros específicos de Avro o registros genéricos. Para el modo de registros específicos es necesario generar primero las clases contra el esquema del productor mediante el siguiente comando de maven:
mvn generate-sources
A continuación, puede ejecutar la aplicación productora mediante los siguientes comandos.
mvn clean package mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
Después de ejecutar correctamente la aplicación productora, le pedirá que elija el esquema productor. Para este inicio rápido, puede elegir la opción 1 - producir Avro SpecificRecords.
Enter case number: 1 - produce Avro SpecificRecords 2 - produce Avro GenericRecords
Una vez que los datos se serialicen y publiquen correctamente, debería ver los siguientes registros de consola en su aplicación de producción:
INFO com.azure.schemaregistry.samples.producer.KafkaAvroSpecificRecord - Sent Order {"id": "ID-0", "amount": 10.0, "description": "Sample order 0"} INFO com.azure.schemaregistry.samples.producer.KafkaAvroSpecificRecord - Sent Order {"id": "ID-1", "amount": 11.0, "description": "Sample order 1"} INFO com.azure.schemaregistry.samples.producer.KafkaAvroSpecificRecord - Sent Order {"id": "ID-2", "amount": 12.0, "description": "Sample order 2"}
Uso del consumidor Kafka con validación de esquema Avro
Para ejecutar la aplicación consumidora Kafka, vaya a azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.
Puede ejecutar la aplicación consumidora de modo que pueda consumir registros específicos de Avro o registros genéricos. Para el modo de registros específicos es necesario generar primero las clases contra el esquema del productor mediante el siguiente comando de maven:
mvn generate-sources
A continuación, puede ejecutar la aplicación de consumo mediante el siguiente comando.
mvn clean package mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
Después de ejecutar correctamente la aplicación consumidora, le pedirá que elija el esquema productor. Para este inicio rápido, puede elegir la opción 1 - consume-Avro SpecificRecords.
Enter case number: 1 - consume Avro SpecificRecords 2 - consume Avro GenericRecords
Una vez consumidos y deserializados los datos correctamente, debería ver los siguientes registros de consola en su aplicación de producción:
INFO com.azure.schemaregistry.samples.consumer.KafkaAvroSpecificRecord - Order received: {"id": "ID-0", "amount": 10.0, "description": "Sample order 0"} INFO com.azure.schemaregistry.samples.consumer.KafkaAvroSpecificRecord - Order received: {"id": "ID-1", "amount": 11.0, "description": "Sample order 1"} INFO com.azure.schemaregistry.samples.consumer.KafkaAvroSpecificRecord - Order received: {"id": "ID-2", "amount": 12.0, "description": "Sample order 2"}
Limpieza de recursos
Elimine el espacio de nombres de Event Hubs o elimine el grupo de recursos que contiene el espacio de nombres.