Schema's valideren voor Apache Kafka-toepassingen met behulp van Avro (Java)

In deze snelstartgids verkennen we hoe u gebeurtenis kunt valideren vanuit Apache Kafka-toepassingen met behulp van Azure Schema Registry voor Event Hubs.

In dit geval gebruikt een Kafka-producenttoepassing Avro-schema dat is opgeslagen in Azure Schema Registry, om de gebeurtenis te serialiseren en te publiceren naar een Kafka-onderwerp/event hub in Azure Event Hubs. De Kafka-consument deserialisatie van de gebeurtenissen die het verbruikt van Event Hubs. Hiervoor wordt de schema-id van de gebeurtenis en het Avro-schema gebruikt, dat is opgeslagen in Azure Schema Registry.

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

Vereisten

Als u nog geen ervaring hebt met Azure Event Hubs, raadpleegt u het Event Hubs-overzicht voordat u deze quickstart uitvoert.

Voor het voltooien van deze snelstart moet aan de volgende vereisten worden voldaan:

Een Event Hub maken

Volg de instructies in de quickstart: Een Event Hubs-naamruimte en een Event Hub maken om een Event Hubs-naamruimte en een Event Hub te maken. Volg vervolgens de instructies van Get the verbindingsreeks om een verbindingsreeks op te halen in uw Event Hubs-naamruimte.

Noteer de volgende instellingen die u in de huidige quickstart gebruikt:

  • Verbinding maken iontekenreeks voor de Event Hubs-naamruimte
  • Naam van de Event Hub

Een schema maken

Volg de instructies uit Schemaregister maken om een schemagroep en een schema te maken.

  1. Maak een schemagroep met de naam contoso-sg met behulp van de portal schemaregister. Gebruik Avro als het serialisatietype en Geen voor de compatibiliteitsmodus.

  2. Maak in die schemagroep een nieuw Avro-schema met schemanaam: Microsoft.Azure.Data.SchemaRegistry.example.Order met behulp van de volgende schema-inhoud.

    {
      "namespace": "Microsoft.Azure.Data.SchemaRegistry.example",
      "type": "record",
      "name": "Order",
      "fields": [
        {
          "name": "id",
          "type": "string"
        },
        {
          "name": "amount",
          "type": "double"
        },
        {
          "name": "description",
          "type": "string"
        }
      ]
    } 
    

Een toepassing registreren voor toegang tot het schemaregister

U kunt De Microsoft Entra-id gebruiken om uw Kafka-producent- en consumententoepassing toegang te geven tot Azure Schema Registry-resources door uw clienttoepassing te registreren bij een Microsoft Entra-tenant vanuit Azure Portal.

Zie Uw toepassing registreren bij een Microsoft Entra-tenant om een Microsoft Entra-toepassing te registreren.example-app

  • tenant.id - stelt de tenant-id van de toepassing in
  • client.id - stelt de client-id van de toepassing in
  • client.secret - stelt het clientgeheim in voor verificatie

En als u beheerde identiteit gebruikt, hebt u het volgende nodig:

  • use.managed.identity.credential - geeft aan dat MSI-referenties moeten worden gebruikt, moeten worden gebruikt voor VM met MSI-functionaliteit
  • managed.identity.clientId - indien opgegeven, wordt MSI-referentie gebouwd met de opgegeven client-id
  • managed.identity.resourceId - indien opgegeven, wordt MSI-referentie gebouwd met een opgegeven resource-id

Gebruiker toevoegen aan de rol Schema Registry Reader

Voeg uw gebruikersaccount toe aan de rol schemaregisterlezer op naamruimteniveau. U kunt ook de rol Inzender voor schemaregisters gebruiken, maar dat is niet nodig voor deze quickstart.

  1. Selecteer op de pagina Event Hubs-naamruimte toegangsbeheer (IAM) in het linkermenu.
  2. Selecteer + Toevoegen -> Roltoewijzing toevoegen in het menu op de pagina Toegangsbeheer (IAM).
  3. Selecteer Volgende op de pagina Toewijzingstype.
  4. Selecteer op de pagina Rollen de optie Schemaregisterlezer (preview) en selecteer vervolgens Volgende onder aan de pagina.
  5. Gebruik de koppeling + Leden selecteren om de example-app toepassing die u in de vorige stap hebt gemaakt, toe te voegen aan de rol en selecteer vervolgens Volgende.
  6. Selecteer Beoordelen en toewijzen op de pagina Beoordelen en toewijzen.

Clienttoepassingsconfiguratie van Kafka-toepassingen bijwerken

U moet de clientconfiguratie van de Kafka-producent- en consumententoepassingen bijwerken met de configuratie met betrekking tot de Microsoft Entra-toepassing die we hebben gemaakt en de schemaregistergegevens.

Als u de configuratie van de Kafka Producer wilt bijwerken, gaat u naar azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Werk de configuratie van de Kafka-toepassing bij in src/main/resources/app.properties door de quickstartgids voor Kafka voor Event Hubs te volgen.

  2. Werk de configuratiegegevens voor de producent in src/main/resources/app.properties bij met behulp van configuratie van het schemaregister en de Microsoft Entra-toepassing die u hierboven hebt gemaakt:

    schema.group=contoso-sg
    schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net
    
     tenant.id=<>
     client.id=<>
     client.secret=<>
    
  3. Volg dezelfde instructies en werk ook de configuratie van azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer bij.

  4. Voor zowel Kafka-producenten- als consumententoepassingen wordt het volgende Avro-schema gebruikt:

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

Kafka-producent gebruiken met Avro-schemavalidatie

Als u de Kafka-producertoepassing wilt uitvoeren, gaat u naar azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. U kunt de producenttoepassing uitvoeren zodat deze avro-specifieke records of algemene records kan produceren. Voor de specifieke recordmodus moet u eerst de klassen genereren op basis van het producerschema met behulp van de volgende maven-opdracht:

    mvn generate-sources
    
  2. Vervolgens kunt u de producenttoepassing uitvoeren met behulp van de volgende opdrachten.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
    
  3. Wanneer de producenttoepassing is uitgevoerd, wordt u gevraagd om het producerscenario te kiezen. Voor deze quickstart kunt u optie 1 kiezen: Avro SpecificRecords produceren.

    Enter case number:
    1 - produce Avro SpecificRecords
    2 - produce Avro GenericRecords
    
  4. Wanneer het serialiseren en publiceren van gegevens is geslaagd, ziet u de volgende consolelogboeken in uw producenttoepassing:

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

Kafka-consument gebruiken met Avro-schemavalidatie

Als u de Kafka-consumententoepassing wilt uitvoeren, gaat u naar azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.

  1. U kunt de consumententoepassing uitvoeren zodat deze avro-specifieke records of algemene records kan gebruiken. Voor de specifieke recordmodus moet u eerst de klassen genereren op basis van het producerschema met behulp van de volgende maven-opdracht:

    mvn generate-sources
    
  2. Vervolgens kunt u de consumententoepassing uitvoeren met behulp van de volgende opdracht.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
    
  3. Wanneer de consumententoepassing is uitgevoerd, wordt u gevraagd om het producentscenario te kiezen. Voor deze quickstart kunt u optie 1 kiezen: Avro SpecificRecords gebruiken.

    Enter case number:
    1 - consume Avro SpecificRecords
    2 - consume Avro GenericRecords
    
  4. Wanneer het gegevensverbruik en deserialisatie is geslaagd, ziet u de volgende consolelogboeken in uw producenttoepassing:

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

Resources opschonen

Verwijder de Event Hubs-naamruimte of verwijder de resourcegroep die de naamruimte bevat.