Kafka API için Azure Event Hubs ile Spring Kafka kullanma

Bu öğreticide, Azure Event Hubs ile mesaj göndermek ve almak amacıyla Java tabanlı Spring Cloud Stream bağlayıcısını Kafka için Azure Event Hubs kullanacak şekilde yapılandırma işlemi gösterilmektedir. Daha fazla bilgi için bkz. Apache Kafka uygulamalarından Azure Event Hubs kullanma

Bu öğreticide iki kimlik doğrulama yöntemi ekleyeceğiz: Microsoft Entra authentication ve Shared Access Signatures (SAS) authentication. Passwordless sekmesi Microsoft Entra kimlik doğrulamasını gösterir ve Connection dizesi sekmesi SAS kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra ID tanımlanan kimlikleri kullanarak Kafka için Azure Event Hubs bağlanma mekanizmasıdır. Microsoft Entra kimlik doğrulamasıyla, veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

SAS kimlik doğrulaması, Kafka için Event Hubs'a temsilci erişimi için Azure Event Hubs ad alanı bağlantı dizgesini kullanır. Paylaşılan Erişim İmzalarını kimlik bilgileri olarak kullanmayı seçerseniz, bağlantı dizgesini kendiniz yönetmeniz gerekir.

Önkoşullar

  • Azure aboneliği - ücretsiz bir abonelik .

  • Java Geliştirme Seti (JDK) sürüm 8 veya üzeri.

  • Apache Maven, sürüm 3.2 veya üzeri.

  • cURL veya benzer bir HTTP yardımcı programını işlevselliği test etmek için kullanın.

  • Azure Cloud Shell veya Azure CLI 2.37.0 veya üzeri.

  • Bir Azure Olay Merkezi. Eğer henüz birine sahip değilseniz, Azure portal kullanarak bir Event Hub oluşturun.

  • Spring Boot uygulaması. Eğer bir tane yoksa, Spring Initializr ile bir Maven projesi oluşturun. Maven Project ve Dependencies altında Spring Web, Spring for Apache Kafka ve Cloud Stream bağımlılıklarını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.

Önemli

Bu öğreticideki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.

Kimlik bilgilerini hazırlama

Azure Event Hubs, Event Hubs kaynaklarına yönelik istekleri yetkilendirmek için Microsoft Entra ID kullanmayı destekler. Microsoft Entra ID ile Azure rol tabanlı erişim denetimi (Azure RBAC) kullanarak kullanıcı veya uygulama hizmet ilkesi olabilecek bir güvenlik ilkesine izin verebilirsiniz.

Bu örneği Microsoft Entra kimlik doğrulamasıyla yerel olarak çalıştırmak istiyorsanız, kullanıcı hesabınızın Azure Toolkit for IntelliJ, Visual Studio Code Azure Account eklentisi veya Azure CLI aracılığıyla kimlik doğrulamasından geçirdiğinizden emin olun. Ayrıca, hesaba yeterli izinlerin verildiğinden emin olun.

Uyarı

Parolasız bağlantılar kullanırken hesabınıza kaynaklara erişim vermeniz gerekir. Azure Event Hubs'da, kullanmakta olduğunuz Microsoft Entra hesabına Azure Event Hubs Data Receiver ve Azure Event Hubs Data Sender rolünü atayın. Erişim rolleri verme hakkında daha fazla bilgi için bkz. Azure portalını kullanarak Azure rollerini atama ve Microsoft Entra ID kullanarak Event Hubs kaynaklarına erişimi yetkilendirme.

Azure Event Hubs'dan ileti gönderme ve alma

Azure Olay hub'ı ile Spring Cloud Azure kullanarak ileti gönderip alabilirsiniz.

Spring Cloud Azure Starter modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:

  • Spring Cloud Azure Ürün Reçetesi( BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.2.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Uyarı

    Spring Boot 4.0.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 7.2.0 olarak ayarladığınızdan emin olun.

    Spring Boot 3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 6.2.0 olarak ayarladığınızdan emin olun.

    Spring Boot 3.1.x-3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.25.0 olarak ayarladığınızdan emin olun.

    Eğer Spring Boot 2.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 4.20.0 olarak ayarladığınızdan emin olun.

    Bu Parça Listesi (BOM), <dependencyManagement> bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.

    Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter artefaktı:

    <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

Uygulamayı kodlama

Uygulamanızı Azure Event Hubs kullanarak ileti üretecek ve kullanacak şekilde yapılandırmak için aşağıdaki adımları kullanın.

  1. Application.properties dosyanıza aşağıdaki özellikleri ekleyerek Olay hub'ı kimlik bilgilerini yapılandırın.

    spring.cloud.stream.kafka.binder.brokers=${AZ_EVENTHUBS_NAMESPACE_NAME}.servicebus.windows.net:9093
    spring.cloud.function.definition=consume;supply
    spring.cloud.stream.bindings.consume-in-0.destination=${AZ_EVENTHUB_NAME}
    spring.cloud.stream.bindings.consume-in-0.group=$Default
    spring.cloud.stream.bindings.supply-out-0.destination=${AZ_EVENTHUB_NAME}
    

    Tavsiye

    Eğer spring-cloud-azure-dependencies:4.3.0 sürümünü kullanıyorsanız, spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources değerine sahip özelliği com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration eklemeniz gerekir.

    olduğundan 4.4.0, bu özellik otomatik olarak eklenir, bu nedenle el ile eklemeniz gerekmez.

    Aşağıdaki tabloda yapılandırmadaki alanlar açıklanmaktadır:

    Alan Açıklama
    spring.cloud.stream.kafka.binder.brokers Azure Event Hubs uç noktasını belirtir.
    spring.cloud.stream.bindings.consume-in-0.destination Girdi hedefi olan etkinlik merkezini belirler, bu eğitici için daha önce oluşturduğunuz merkezdir.
    spring.cloud.stream.bindings.consume-in-0.group Azure Event Hubs örneğinizi oluştururken oluşturulan temel tüketici grubunu kullanmak için Azure Event Hubs'den $Default olarak ayarlayabileceğiniz bir Tüketici Grubu belirtir.
    spring.cloud.stream.bindings.supply-out-0.destination Bu öğretici için giriş hedefiyle aynı olan çıkış hedefi olay hub'ını tanımlar.

    Uyarı

    Otomatik konu oluşturmayı etkinleştirirseniz, değeri en az spring.cloud.stream.kafka.binder.replicationFactorolarak ayarlanmış 1yapılandırma öğesini eklediğinizden emin olun. Daha fazla bilgi için bkz . Spring Cloud Stream Kafka Binder Başvuru Kılavuzu.

  2. Aşağıdaki içeriği göstermek için başlangıç sınıfı dosyasını düzenleyin.

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.messaging.Message;
    import org.springframework.messaging.support.GenericMessage;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Sinks;
    import java.util.function.Consumer;
    import java.util.function.Supplier;
    
    @SpringBootApplication
    public class EventHubKafkaBinderApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaBinderApplication.class);
    
        private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer();
    
        public static void main(String[] args) {
            SpringApplication.run(EventHubKafkaBinderApplication.class, args);
        }
    
        @Bean
        public Supplier<Flux<Message<String>>> supply() {
            return ()->many.asFlux()
                           .doOnNext(m->LOGGER.info("Manually sending message {}", m))
                           .doOnError(t->LOGGER.error("Error encountered", t));
        }
    
        @Bean
        public Consumer<Message<String>> consume() {
            return message->LOGGER.info("New message received: '{}'", message.getPayload());
        }
    
        @Override
        public void run(String... args) {
            many.emitNext(new GenericMessage<>("Hello World"), Sinks.EmitFailureHandler.FAIL_FAST);
        }
    
    }
    

    Tavsiye

    Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak, Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, Azure Kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı DefaultAzureCredential kullanır.

    DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz. DefaultAzureCredential.

    Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz. Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?

  3. Uygulamayı başlatın. Aşağıdaki örnek gibi iletiler uygulama günlüğünüze gönderilecektir:

    Kafka version: 3.0.1
    Kafka commitId: 62abe01bee039651
    Kafka startTimeMs: 1622616433956
    New message received: 'Hello World'
    

Azure Spring Apps'e dağıtım yapma

Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps Spring Boot uygulamalarını kod değişikliği olmadan Azure dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps dağıtmak için bkz. İlk uygulamanızı Azure Spring Apps'a dağıtma.

Sonraki adımlar