Partilhar via


Validar esquemas para aplicativos Apache Kafka usando Avro (Java)

Neste guia de início rápido, exploramos como validar eventos de aplicativos Apache Kafka usando o Registro de Esquema do Azure para Hubs de Eventos.

Nesse caso de uso, um aplicativo produtor Kafka usa o esquema Avro armazenado no Registro de Esquema do Azure para, serializar o evento e publicá-lo em um hub de tópico/evento Kafka nos Hubs de Eventos do Azure. O consumidor Kafka desserializa os eventos que consome dos Hubs de Eventos. Para isso, ele usa a ID do esquema do evento e o esquema Avro, que é armazenado no Registro do Esquema do Azure.

Diagram showing schema serialization/de-serialization for Kafka applications using Avro schema.

Pré-requisitos

Se você é novo nos Hubs de Eventos do Azure, consulte Visão geral dos Hubs de Eventos antes de fazer este início rápido.

Para concluir este início rápido, você precisa dos seguintes pré-requisitos:

Criar um hub de eventos

Siga as instruções do início rápido: crie um namespace de Hubs de Eventos e um hub de eventos para criar um namespace de Hubs de Eventos e um hub de eventos. Em seguida, siga as instruções de Obter a cadeia de conexão para obter uma cadeia de conexão para seu namespace de Hubs de Eventos.

Anote as seguintes configurações que você usa no início rápido atual:

  • Cadeia de conexão para o namespace Hubs de Eventos
  • Nome do hub de eventos

Criar um esquema

Siga as instruções de Criar esquemas usando o Registro de Esquema para criar um grupo de esquemas e um esquema.

  1. Crie um grupo de esquemas chamado contoso-sg usando o portal do Registro de Esquema. Use Avro como o tipo de serialização e Nenhum para o modo de compatibilidade.

  2. Nesse grupo de esquemas, crie um novo esquema Avro com nome de esquema: Microsoft.Azure.Data.SchemaRegistry.example.Order usando o seguinte conteúdo 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"
        }
      ]
    } 
    

Registrar um aplicativo para acessar o registro de esquema

Você pode usar a ID do Microsoft Entra para autorizar seu aplicativo produtor e consumidor Kafka a acessar os recursos do Registro do Esquema do Azure registrando seu aplicativo cliente com um locatário do Microsoft Entra no portal do Azure.

Para registrar um aplicativo Microsoft Entra chamado example-app consulte Registrar seu aplicativo com um locatário do Microsoft Entra.

  • tenant.id - define a ID do locatário do aplicativo
  • client.id - define a ID do cliente do aplicativo
  • client.secret - define o segredo do cliente para autenticação

E se você estiver usando a identidade gerenciada, precisará:

  • use.managed.identity.credential - indica que as credenciais MSI devem ser usadas, devem ser usadas para VM habilitada para MSI
  • managed.identity.clientId - se especificado, ele cria credenciais MSI com determinado ID de cliente
  • managed.identity.resourceId - se especificado, ele cria uma credencial MSI com determinado ID de recurso

Adicionar usuário à função Leitor de Registro de Esquema

Adicione sua conta de usuário à função Leitor de Registro de Esquema no nível do namespace. Você também pode usar a função de Colaborador do Registro de Esquema , mas isso não é necessário para este início rápido.

  1. Na página Namespace de Hubs de Eventos, selecione Controle de acesso (IAM) no menu à esquerda.
  2. Na página Controle de acesso (IAM), selecione + Adicionar ->Adicionar atribuição de função no menu.
  3. Na página Tipo de atribuição, selecione Avançar.
  4. Na página Funções, selecione Leitor do Registro de Esquema (Visualização) e selecione Avançar na parte inferior da página.
  5. Use o link + Selecionar membros para adicionar o example-app aplicativo que você criou na etapa anterior à função e, em seguida, selecione Avançar.
  6. Na página Rever + atribuir, selecione Rever + atribuir.

Atualizar a configuração do aplicativo cliente de aplicativos Kafka

Você precisa atualizar a configuração do cliente dos aplicativos produtor e consumidor Kafka com a configuração relacionada ao aplicativo Microsoft Entra que criamos e as informações de registro do esquema.

Para atualizar a configuração do Kafka Producer, navegue até azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Atualize a configuração do aplicativo Kafka em src/main/resources/app.properties seguindo o guia de início rápido do Kafka para Hubs de Eventos.

  2. Atualize os detalhes de configuração para o produtor em src/main/resources/app.properties usando a configuração relacionada ao registro de esquema e o aplicativo Microsoft Entra que você criou acima da seguinte maneira:

    schema.group=contoso-sg
    schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net
    
     tenant.id=<>
     client.id=<>
     client.secret=<>
    
  3. Siga as mesmas instruções e atualize também a configuração azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer .

  4. Para aplicativos de produtor e consumidor Kafka, o esquema Avro a seguir é usado:

    {
      "namespace": "com.azure.schemaregistry.samples",
      "type": "record",
      "name": "Order",
      "fields": [
        {
          "name": "id",
          "type": "string"
        },
        {
          "name": "amount",
          "type": "double"
        },
        {
          "name": "description",
          "type": "string"
        }
      ]
    }
    

Usando o produtor Kafka com validação de esquema Avro

Para executar o aplicativo produtor Kafka, navegue até azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Você pode executar o aplicativo produtor para que ele possa produzir registros específicos do Avro ou registros genéricos. Para o modo de registros específicos, você precisa primeiro gerar as classes no esquema do produtor usando o seguinte comando maven:

    mvn generate-sources
    
  2. Em seguida, você pode executar o aplicativo produtor usando os seguintes comandos.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
    
  3. Após a execução bem-sucedida do aplicativo produtor, ele solicita que você escolha o cenário do produtor. Para este início rápido, você pode escolher a opção 1 - produzir Avro SpecificRecords.

    Enter case number:
    1 - produce Avro SpecificRecords
    2 - produce Avro GenericRecords
    
  4. Após a serialização e publicação de dados bem-sucedidas, você verá os seguintes logs de console em seu aplicativo produtor:

    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"}
    

Usando o consumidor Kafka com validação de esquema Avro

Para executar o aplicativo Kafka consumer, navegue até azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.

  1. Você pode executar o aplicativo consumidor para que ele possa consumir registros específicos do Avro ou registros genéricos. Para o modo de registros específicos, você precisa primeiro gerar as classes no esquema do produtor usando o seguinte comando maven:

    mvn generate-sources
    
  2. Em seguida, você pode executar o aplicativo consumidor usando o seguinte comando.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
    
  3. Após a execução bem-sucedida do aplicativo consumidor, ele solicita que você escolha o cenário do produtor. Para este início rápido, você pode escolher a opção 1 - consumir Avro SpecificRecords.

    Enter case number:
    1 - consume Avro SpecificRecords
    2 - consume Avro GenericRecords
    
  4. Após o consumo de dados e a desserialização bem-sucedidos, você verá os seguintes logs de console em seu aplicativo produtor:

    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"}
    

Clean up resources (Limpar recursos)

Exclua o namespace Hubs de Eventos ou exclua o grupo de recursos que contém o namespace.