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.
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:
- Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Installeer de volgende onderdelen in uw ontwikkelomgeving:
- Java Development Kit (JDK) 1.7+.
- Download en installeer een binair Maven-archief.
- Git
- Kloon het Azure Schema Registry voor kafka-opslagplaats .
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.
Maak een schemagroep met de naam contoso-sg met behulp van de portal schemaregister. Gebruik Avro als het serialisatietype en Geen voor de compatibiliteitsmodus.
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.
- Selecteer op de pagina Event Hubs-naamruimte toegangsbeheer (IAM) in het linkermenu.
- Selecteer + Toevoegen -> Roltoewijzing toevoegen in het menu op de pagina Toegangsbeheer (IAM).
- Selecteer Volgende op de pagina Toewijzingstype.
- Selecteer op de pagina Rollen de optie Schemaregisterlezer (preview) en selecteer vervolgens Volgende onder aan de pagina.
- 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. - 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.
Werk de configuratie van de Kafka-toepassing bij in src/main/resources/app.properties door de quickstartgids voor Kafka voor Event Hubs te volgen.
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=<>
Volg dezelfde instructies en werk ook de configuratie van azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer bij.
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.
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
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"
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
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.
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
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"
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
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.