Überprüfen von Schemas für Apache Kafka-Anwendungen mittels Avro (Java)

In diesem Schnellstart erfahren Sie, wie Sie Ereignisse aus Apache Kafka-Anwendungen mithilfe der Azure-Schemaregistrierung für Event Hubs überprüfen.

In diesem Anwendungsfall verwendet eine Kafka Producer-Anwendung das in der Azure-Schemaregistrierung gespeicherte Avro-Schema, um das Ereignis zu serialisieren und in einem Kafka-Themen-/Event-Hub in Azure Event Hubs zu veröffentlichen. Der Kafka-Consumer deserialisiert die Ereignisse, die er aus Event Hubs konsumiert. Dazu werden die Schema-ID des Ereignisses und das Avro-Schema verwendet, das in der Azure-Schemaregistrierung gespeichert ist.

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

Voraussetzungen

Wenn Sie mit Azure Event Hubs noch nicht vertraut sind, lesen Sie vor dem Durcharbeiten dieser Schnellstartanleitung die Informationen unter Übersicht über Event Hubs.

Zum Durchführen dieser Schnellstartanleitung benötigen Sie Folgendes:

Erstellen eines Ereignis-Hubs

Befolgen Sie die Anweisungen aus der Schnellstartanleitung Erstellen eines Event Hubs-Namespaces und eines Event Hubs, um einen Event Hubs-Namespace und einen Event Hub zu erstellen. Befolgen Sie dann die Anweisungen unter Abrufen der Verbindungszeichenfolge, um eine Verbindungszeichenfolge für Ihren Event Hubs-Namespace abzurufen.

Notieren Sie sich die folgenden Einstellungen, die Sie in der aktuellen Schnellstartanleitung verwenden werden:

  • Verbindungszeichenfolge für den Event Hubs-Namespace
  • Name des Event Hubs

Erstellen eines Schemas

Befolgen Sie die Anweisungen unter Erstellen von Schemas mithilfe der Schemaregistrierung , um eine Schemagruppe und ein Schema zu erstellen.

  1. Erstellen Sie im Schemaregistrierungsportal eine Schemagruppe namens contoso-sg. Verwenden Sie Avro als Serialisierungstyp, und geben Sie Keine für den Kompatibilitätsmodus an.

  2. Erstellen Sie in dieser Schemagruppe ein neues Avro-Schema mit dem Schemanamen Microsoft.Azure.Data.SchemaRegistry.example.Order. Verwenden Sie den folgenden Schemainhalt.

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

Registrieren einer Anwendung für den Zugriff auf die Schemaregistrierung

Sie können Microsoft Entra ID verwenden, um Ihre Kafka Producer- und Ihre Consumer-Anwendung für den Zugriff auf die Ressourcen der Azure-Schemaregistrierung zu autorisieren, indem Sie Ihre Clientanwendung über das Azure-Portal bei einem Microsoft Entra-Mandanten registrieren.

Informationen zum Registrieren einer Microsoft Entra-Anwendung mit dem Namen example-app finden Sie unter Registrieren Ihrer Anwendung bei einem Microsoft Entra-Mandanten.

  • tenant.id – legt die Mandanten-ID der Anwendung fest
  • client.id – legt die Client-ID der Anwendung fest
  • client.secret – legt den geheimen Clientschlüssel für die Authentifizierung fest

Und wenn Sie verwaltete Identitäten verwenden, würden Sie Folgendes benötigen:

  • use.managed.identity.credential – gibt an, dass MSI-Anmeldeinformationen für MSI-fähige VMs verwendet werden sollten
  • managed.identity.clientId – wenn angegeben, erstellt sie MSI-Anmeldeinformationen mit der angegebenen Client-ID
  • managed.identity.resourceId – wenn angegeben, erstellt sie MSI-Anmeldeinformationen mit der angegebenen Ressourcen-ID

Hinzufügen eines Benutzers zur Rolle „Schemaregistrierungsleser“

Fügen Sie Ihr Benutzerkonto auf Namespaceebene der Rolle Schemaregistrierungsleser hinzu. Sie können auch die Rolle Mitwirkender der Schemaregistrierung verwenden, aber dies ist für diese Schnellstartanleitung nicht erforderlich.

  1. Wählen Sie auf der Seite Event Hubs-Namespace im linken Menü Zugriffssteuerung (IAM) aus.
  2. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Option + Hinzufügen ->Rollenzuweisung hinzufügen aus.
  3. Wählen Sie auf der Seite Zuweisungstyp die Option Weiter aus.
  4. Wählen Sie auf der Seite Rollen die Option Schemaregistrierungsleser (Vorschau) und dann unten auf der Seite Weiter aus.
  5. Verwenden Sie den Link + Mitglieder auswählen, um die Anwendung example-app, die Sie im vorherigen Schritt erstellt haben, der Rolle hinzuzufügen. Wählen Sie dann Weiter aus.
  6. Wählen Sie auf der Seite Überprüfen + zuweisen die Option Überprüfen + zuweisen aus.

Aktualisieren der Konfiguration der Clientanwendung von Kafka-Anwendungen

Sie müssen die Clientkonfiguration der Kafka Producer- und Consumer-Anwendungen mit der Konfiguration im Zusammenhang mit der von uns erstellten Microsoft Entra-Anwendung und den Schemaregistrierungsinformationen aktualisieren.

Navigieren Sie zum Aktualisieren der Kafka Producer-Konfiguration zu azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Aktualisieren Sie die Konfiguration der Kafka-Anwendung in src/main/resources/app.properties, indem Sie der Kafka-Schnellstartanleitung für Event Hubs folgen.

  2. Aktualisieren Sie die Konfigurationsdetails für den Producer in src/main/resources/app.properties mithilfe der Konfiguration für die Schemaregistrierung und der Microsoft Entra-Anwendung, die Sie oben erstellt haben, wie folgt:

    schema.group=contoso-sg
    schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net
    
     tenant.id=<>
     client.id=<>
     client.secret=<>
    
  3. Befolgen Sie dieselben Anweisungen, und aktualisieren Sie auch die Konfiguration azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.

  4. Für Kafka Producer- und Consumer-Anwendungen wird das folgende Avro-Schema verwendet:

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

Verwenden des Kafka Producers mit Avro-Schemavalidierung

Navigieren Sie zum Ausführen der Kafka Producer-Anwendung zu azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Sie können die Producer-Anwendung so ausführen, dass sie Avro-spezifische Datensätze oder generische Datensätze erstellen kann. Für einen bestimmten Datensatzmodus müssen Sie zuerst die Klassen für das Producer-Schema mit dem folgenden Maven-Befehl generieren:

    mvn generate-sources
    
  2. Anschließend können Sie die Produceranwendung mit den folgenden Befehlen ausführen.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
    
  3. Nach erfolgreicher Ausführung der Producer-Anwendung werden Sie aufgefordert, das Producer-Szenario auszuwählen. In diesem Schnellstart können Sie die Option 1 – erstellen von Avro-spezifischen Datensätzen auswählen.

    Enter case number:
    1 - produce Avro SpecificRecords
    2 - produce Avro GenericRecords
    
  4. Nach erfolgreicher Datenserialisierung und Veröffentlichung sollten Ihnen die folgenden Konsolenprotokolle in Ihrer Producer-Anwendung angezeigt werden:

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

Verwenden des Kafka-Consumers mit Avro-Schemavalidierung

Navigieren Sie zum Ausführen der Kafka-Consumer-Anwendung zu azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.

  1. Sie können die Consumer-Anwendung so ausführen, dass sie Avro-spezifische Datensätze oder generische Datensätze konsumiert. Für einen bestimmten Datensatzmodus müssen Sie zuerst die Klassen für das Producer-Schema mit dem folgenden Maven-Befehl generieren:

    mvn generate-sources
    
  2. Anschließend können Sie die Consumeranwendung mit dem folgenden Befehl ausführen.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
    
  3. Nach erfolgreicher Ausführung der Consumer-Anwendung werden Sie aufgefordert, das Producer-Szenario auszuwählen. In diesem Schnellstart können Sie die Option 1 –konsumieren von Avro-spezifischen Datensätzen auswählen.

    Enter case number:
    1 - consume Avro SpecificRecords
    2 - consume Avro GenericRecords
    
  4. Nach erfolgreicher Konsumation und Deserialisierung der Daten sollten Ihnen die folgenden Konsolenprotokolle in Ihrer Producer-Anwendung angezeigt werden:

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

Bereinigen von Ressourcen

Löschen Sie den Event Hubs-Namespace, oder löschen Sie die Ressourcengruppe, die den Namespace enthält.