Verifiera scheman för Apache Kafka-program med Hjälp av Avro (Java)

I den här snabbstartsguiden utforskar vi hur du verifierar händelser från Apache Kafka-program med hjälp av Azure Schema Registry för Event Hubs.

I det här användningsfallet använder ett Kafka-producentprogram Avro-schema som lagras i Azure Schema Registry för att serialisera händelsen och publicera dem till en Kafka-ämnes-/händelsehubb i Azure Event Hubs. Kafka-konsumenten deserialiserar de händelser som den använder från Event Hubs. För det använder den schema-ID för händelsen och Avro-schemat, som lagras i Azure Schema Registry.

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

Förutsättningar

Om du inte har använt Azure Event Hubs tidigare kan du läsa Översikt över Event Hubs innan du gör den här snabbstarten.

För att slutföra den här snabbstarten, behöver du följande förhandskrav:

Skapa en händelsehubb

Följ anvisningarna i snabbstarten: Skapa ett Event Hubs-namnområde och en händelsehubb för att skapa ett Event Hubs-namnområde och en händelsehubb. Följ sedan anvisningarna från Hämta anslutningssträng för att få en anslutningssträng till Event Hubs-namnområdet.

Anteckna följande inställningar som du använder i den aktuella snabbstarten:

  • Anslut ionssträng för Event Hubs-namnområdet
  • Namn på händelsehubben

Skapa ett schema

Följ anvisningarna från Skapa scheman med schemaregistret för att skapa en schemagrupp och ett schema.

  1. Skapa en schemagrupp med namnet contoso-sg med hjälp av schemaregisterportalen. Använd Avro som serialiseringstyp och Ingen för kompatibilitetsläget.

  2. I den schemagruppen skapar du ett nytt Avro-schema med schemanamn: Microsoft.Azure.Data.SchemaRegistry.example.Order med hjälp av följande schemainnehåll.

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

Registrera ett program för åtkomst till schemaregistret

Du kan använda Microsoft Entra-ID för att auktorisera ditt Kafka-producent- och konsumentprogram för åtkomst till Azure Schema Registry-resurser genom att registrera klientprogrammet med en Microsoft Entra-klientorganisation från Azure-portalen.

Information om hur du registrerar ett Microsoft Entra-program med namnet finns example-app i Registrera ditt program med en Microsoft Entra-klientorganisation.

  • tenant.id – anger klientorganisations-ID för programmet
  • client.id – anger programmets klient-ID
  • client.secret – anger klienthemligheten för autentisering

Och om du använder hanterad identitet behöver du:

  • use.managed.identity.credential – anger att MSI-autentiseringsuppgifter ska användas, ska användas för MSI-aktiverad virtuell dator
  • managed.identity.clientId – om det anges skapas MSI-autentiseringsuppgifter med angivet klient-ID
  • managed.identity.resourceId – om det anges skapas MSI-autentiseringsuppgifter med angivet resurs-ID

Lägg till användare i rollen Schema Registry Reader

Lägg till ditt användarkonto i rollen Schema Registry Reader på namnområdesnivå. Du kan också använda rollen Schema Registry-deltagare , men det är inte nödvändigt för den här snabbstarten.

  1. På sidan Event Hubs-namnområde väljer du Åtkomstkontroll (IAM) på den vänstra menyn.
  2. På sidan Åtkomstkontroll (IAM) väljer du + Lägg till ->Lägg till rolltilldelning på menyn.
  3. På sidan Tilldelningstyp väljer du Nästa.
  4. På sidan Roller väljer du Schema Registry Reader (förhandsversion) och sedan Nästa längst ned på sidan.
  5. Använd länken + Välj medlemmar för att lägga till det example-app program som du skapade i föregående steg i rollen och välj sedan Nästa.
  6. På sidan Granska + tilldela väljer du Granska + tilldela.

Uppdatera klientprogramkonfigurationen för Kafka-program

Du måste uppdatera klientkonfigurationen för Kafka-producent- och konsumentprogram med konfigurationen som är relaterad till Microsoft Entra-programmet som vi skapade och schemaregisterinformationen.

Om du vill uppdatera Kafka-producentkonfigurationen går du till azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Uppdatera konfigurationen av Kafka-programmet i src/main/resources/app.properties genom att följa Kafka-snabbstartsguiden för Event Hubs.

  2. Uppdatera konfigurationsinformationen för producenten i src/main/resources/app.properties med hjälp av schemaregisterrelaterad konfiguration och Microsoft Entra-programmet som du skapade ovan enligt följande:

    schema.group=contoso-sg
    schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net
    
     tenant.id=<>
     client.id=<>
     client.secret=<>
    
  3. Följ samma instruktioner och uppdatera även konfigurationen azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer .

  4. För både Kafka-producent- och konsumentprogram används följande Avro-schema:

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

Använda Kafka-producent med Avro-schemavalidering

Om du vill köra Kafka-producentprogrammet går du till azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer.

  1. Du kan köra producentprogrammet så att det kan skapa Avro-specifika poster eller allmänna poster. För specifikt postläge måste du först generera klasserna mot antingen producentschemat med hjälp av följande maven-kommando:

    mvn generate-sources
    
  2. Sedan kan du köra producentprogrammet med hjälp av följande kommandon.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
    
  3. När producentprogrammet har körts uppmanas du att välja producentscenario. För den här snabbstarten kan du välja alternativ 1 – skapa Avro SpecificRecords.

    Enter case number:
    1 - produce Avro SpecificRecords
    2 - produce Avro GenericRecords
    
  4. Vid lyckad data serialisering och publicering bör du se följande konsolloggar i producentprogrammet:

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

Använda Kafka-konsument med Avro-schemavalidering

Om du vill köra Kafka-konsumentprogrammet går du till azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer.

  1. Du kan köra konsumentprogrammet så att det kan använda Avro-specifika poster eller allmänna poster. För specifikt postläge måste du först generera klasserna mot antingen producentschemat med hjälp av följande maven-kommando:

    mvn generate-sources
    
  2. Sedan kan du köra konsumentprogrammet med hjälp av följande kommando.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
    
  3. När konsumentprogrammet har körts uppmanas du att välja producentscenario. För den här snabbstarten kan du välja alternativ 1 – använda Avro SpecificRecords.

    Enter case number:
    1 - consume Avro SpecificRecords
    2 - consume Avro GenericRecords
    
  4. Vid lyckad dataförbrukning och deserialisering bör du se följande konsolloggar i producentprogrammet:

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

Rensa resurser

Ta bort Event Hubs-namnområdet eller ta bort resursgruppen som innehåller namnområdet.