Avro (Java) kullanarak Apache Kafka uygulamaları için şemaları doğrulama

Bu hızlı başlangıç kılavuzunda, Event Hubs için Azure Schema Registry kullanarak Apache Kafka uygulamalarından olayı doğrulamayı keşfedeceğiz.

Bu kullanım örneğinde Kafka üretici uygulaması Azure Schema Registry'de depolanan Avro şemasını kullanarak olayı seri hale getirip Azure Event Hubs'daki bir Kafka konusuna/olay hub'ına yayımlar. Kafka tüketicisi Event Hubs'dan tükettiği olayları seri durumdan kaldırır. Bunun için olayın şema kimliğini ve Azure Schema Registry'de depolanan Avro şemasını kullanır.

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

Ön koşullar

Azure Event Hubs'da yeniyseniz bu hızlı başlangıcı gerçekleştirmeden önce event hubs'a genel bakış konusuna bakın.

Bu hızlı başlangıcı tamamlamak için aşağıdaki önkoşullara ihtiyacınız vardır:

Olay hub’ı oluşturma

Hızlı başlangıçtaki yönergeleri izleyin: Event Hubs ad alanı ve olay hub'ı oluşturmak için Event Hubs ad alanı ve olay hub'ı oluşturma. Ardından, Event Hubs ad alanınıza bir bağlantı dizesi almak için bağlantı dizesi alma başlığındaki yönergeleri izleyin.

Geçerli hızlı başlangıçta kullandığınız aşağıdaki ayarları not edin:

  • Event Hubs ad alanı için Bağlan ion dizesi
  • Olay hub'ının adı

Şema oluşturma

Şema grubu ve şema oluşturmak için Şema Kayıt Defteri'ni kullanarak şema oluşturma başlığındaki yönergeleri izleyin.

  1. Schema Registry portalını kullanarak contoso-sg adlı bir şema grubu oluşturun. Uyumluluk modu için serileştirme türü olarak Avro ve Yok kullanın.

  2. Bu şema grubunda, aşağıdaki şema içeriğini kullanarak şema adıyla Microsoft.Azure.Data.SchemaRegistry.example.Order yeni bir Avro şeması oluşturun.

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

Şema kayıt defterine erişmek için bir uygulama kaydetme

İstemci uygulamanızı Azure portalından bir Microsoft Entra kiracısına kaydederek Kafka üretici ve tüketici uygulamanızı Azure Schema Registry kaynaklarına erişme yetkisi vermek için Microsoft Entra Id kullanabilirsiniz.

adlı example-app bir Microsoft Entra uygulamasını kaydetmek için bkz . Uygulamanızı Bir Microsoft Entra kiracısına kaydetme.

  • tenant.id - uygulamanın kiracı kimliğini ayarlar
  • client.id - uygulamanın istemci kimliğini ayarlar
  • client.secret - kimlik doğrulaması için istemci gizli dizisini ayarlar

Yönetilen kimlik kullanıyorsanız şunları yapmanız gerekir:

  • use.managed.identity.credential - MSI kimlik bilgilerinin kullanılması gerektiğini, MSI özellikli VM için kullanılması gerektiğini gösterir
  • managed.identity.clientId - belirtilirse, verilen istemci kimliğiyle MSI kimlik bilgilerini oluşturur
  • managed.identity.resourceId - belirtilirse, belirtilen kaynak kimliğiyle MSI kimlik bilgilerini oluşturur

Şema Kayıt Defteri Okuyucusu rolüne kullanıcı ekleme

Kullanıcı hesabınızı ad alanı düzeyinde Şema Kayıt Defteri Okuyucusu rolüne ekleyin. Şema Kayıt Defteri Katkıda Bulunanı rolünü de kullanabilirsiniz, ancak bu hızlı başlangıç için gerekli değildir.

  1. Event Hubs Ad Alanı sayfasında, soldaki menüden Erişim denetimi (IAM) öğesini seçin.
  2. Erişim denetimi (IAM) sayfasında, menüde + Ekle ->Rol ataması ekle'yi seçin.
  3. Atama türü sayfasında İleri'yi seçin.
  4. Roller sayfasında Şema Kayıt Defteri Okuyucusu (Önizleme) öğesini ve ardından sayfanın alt kısmındaki İleri'yi seçin.
  5. Önceki adımda oluşturduğunuz uygulamayı role eklemek example-app için + Üye seç bağlantısını kullanın ve ardından İleri'yi seçin.
  6. Gözden geçir ve ata sayfasında Gözden geçir ve ata'yı seçin.

Kafka uygulamalarının istemci uygulama yapılandırmasını güncelleştirme

Kafka üretici ve tüketici uygulamalarının istemci yapılandırmasını, oluşturduğumuz Microsoft Entra uygulamasıyla ilgili yapılandırma ve şema kayıt defteri bilgileriyle güncelleştirmeniz gerekir.

Kafka Üretici yapılandırmasını güncelleştirmek için azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer adresine gidin.

  1. Event Hubs için Kafka Hızlı Başlangıç kılavuzunu izleyerek src/main/resources/app.properties içindeki Kafka uygulamasının yapılandırmasını güncelleştirin.

  2. Şema kayıt defteriyle ilgili yapılandırmayı ve yukarıda oluşturduğunuz Microsoft Entra uygulamasını kullanarak src/main/resources/app.properties içindeki üreticinin yapılandırma ayrıntılarını aşağıdaki gibi güncelleştirin:

    schema.group=contoso-sg
    schema.registry.url=https://<NAMESPACENAME>.servicebus.windows.net
    
     tenant.id=<>
     client.id=<>
     client.secret=<>
    
  3. Aynı yönergeleri izleyin ve azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer yapılandırmasını da güncelleştirin.

  4. Hem Kafka üretici hem de tüketici uygulamaları için aşağıdaki Avro şeması kullanılır:

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

Avro şema doğrulaması ile Kafka üreticisini kullanma

Kafka üretici uygulamasını çalıştırmak için azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-producer adresine gidin.

  1. Avro'ya özgü kayıtlar veya genel kayıtlar üretebilmesi için üretici uygulamasını çalıştırabilirsiniz. Belirli kayıt modu için önce aşağıdaki maven komutunu kullanarak üretici şemasında sınıfları oluşturmanız gerekir:

    mvn generate-sources
    
  2. Ardından aşağıdaki komutları kullanarak üretici uygulamasını çalıştırabilirsiniz.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.producer.App"
    
  3. Üretici uygulamasının başarıyla yürütülmesinden sonra, üretici senaryosunu seçmeniz istenir. Bu hızlı başlangıç için 1 seçeneğini belirleyebilirsiniz: Avro SpecificRecords üretin.

    Enter case number:
    1 - produce Avro SpecificRecords
    2 - produce Avro GenericRecords
    
  4. Başarılı veri serileştirme ve yayımlama sonrasında üretici uygulamanızda aşağıdaki konsol günlüklerini görmeniz gerekir:

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

Avro şema doğrulaması ile Kafka tüketicisi kullanma

Kafka tüketici uygulamasını çalıştırmak için azure-schema-registry-for-kafka/tree/master/java/avro/samples/kafka-consumer adresine gidin.

  1. Avro'ya özgü kayıtları veya genel kayıtları tüketmesi için tüketici uygulamasını çalıştırabilirsiniz. Belirli kayıt modu için önce aşağıdaki maven komutunu kullanarak üretici şemasında sınıfları oluşturmanız gerekir:

    mvn generate-sources
    
  2. Ardından aşağıdaki komutu kullanarak tüketici uygulamasını çalıştırabilirsiniz.

    mvn clean package
    mvn -e clean compile exec:java -Dexec.mainClass="com.azure.schemaregistry.samples.consumer.App"
    
  3. Tüketici uygulamasının başarıyla yürütülmesinden sonra, üretici senaryosunu seçmeniz istenir. Bu hızlı başlangıç için 1 - Avro SpecificRecords kullanma seçeneğini belirleyebilirsiniz.

    Enter case number:
    1 - consume Avro SpecificRecords
    2 - consume Avro GenericRecords
    
  4. Başarılı veri tüketimi ve seri durumdan çıkarma işleminden sonra üretici uygulamanızda aşağıdaki konsol günlüklerini görmeniz gerekir:

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

Kaynakları temizleme

Event Hubs ad alanını silin veya ad alanını içeren kaynak grubunu silin.