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

Bu öğreticide, Azure Event Hubs ile ileti göndermek ve almak için Kafka için Azure Event Hubs'ı kullanmak üzere Java tabanlı Spring Cloud Stream Binder'ın nasıl yapılandırılabileceği 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 kimlik doğrulaması ve Paylaşılan Erişim İmzaları (SAS) kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Bağlantı dizesi sekmesi ise SAS kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra Id'de tanımlanan kimlikleri kullanarak Kafka için Azure Event Hubs'a bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilir 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ınızın bağlantı dizesi kullanır. Paylaşılan Erişim İmzalarını kimlik bilgileri olarak kullanmayı seçerseniz, bağlantı dizesi kendiniz yönetmeniz gerekir.

Önkoşullar

  • Azure aboneliği - ücretsiz bir abonelik oluşturun.

  • Java Development Kit (JDK) sürüm 8 veya üzeri.

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

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

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

  • Azure Olay Hub'ı. Yoksa Azure portalını kullanarak bir olay hub'ı oluşturun.

  • Spring Boot uygulaması. Yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Projesi'ni seçtiğinizden emin olun ve Bağımlılıklar'ın altında Spring Web, Apache Kafka için Spring ve Cloud Stream bağımlılıklarını ekleyip 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 kullanılmasını destekler. Microsoft Entra Id ile Azure rol tabanlı erişim denetimini (Azure RBAC) kullanarak bir kullanıcı veya uygulama hizmet sorumlusu olabilecek bir güvenlik sorumlusuna izin vekleyebilirsiniz.

Bu örneği Microsoft Entra kimlik doğrulamasıyla yerel olarak çalıştırmak istiyorsanız, kullanıcı hesabınızın Kimliğinin IntelliJ için Azure Toolkit, Visual Studio Code Azure Hesabı eklentisi veya Azure CLI aracılığıyla doğrulanmış olduğundan emin olun. Ayrıca, hesaba yeterli izinlerin verildiğinden emin olun.

Not

Parolasız bağlantılar kullanırken hesabınıza kaynaklara erişim vermeniz gerekir. Azure Event Hubs'da ve Azure Event Hubs Data Sender rolünü şu anda kullanmakta olduğunuz Microsoft Entra hesabına atayınAzure Event Hubs Data Receiver. Erişim rolleri verme hakkında daha fazla bilgi için bkz . Azure portalını kullanarak Azure rolleri atama ve Microsoft Entra Id kullanarak Event Hubs kaynaklarına erişim 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>5.18.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 2.x kullanıyorsanız, sürümünü olarak 4.19.0ayarladığınızdan spring-cloud-azure-dependencies emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>. 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 . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter yapıtı:

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

    İpucu

    sürümünü spring-cloud-azure-dependencies:4.3.0kullanıyorsanız değerini com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfigurationiçeren özelliğini spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources 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 Bu öğretici için daha önce oluşturduğunuz hub olan giriş hedef olay hub'ını belirtir.
    spring.cloud.stream.bindings.consume-in-0.group Azure Event Hubs örneğinizi oluştururken oluşturulan temel tüketici grubunu kullanmak için ayarlayabileceğiniz $Default Azure Event Hubs'dan bir Tüketici Grubu belirtir.
    spring.cloud.stream.bindings.supply-out-0.destination Bu öğretici için giriş hedefiyle aynı olan çıkış hedef olay hub'ını belirtir.

    Not

    Otomatik konu oluşturmayı etkinleştirirseniz, değeri en az 1 olarak ayarlanmış yapılandırma öğesini spring.cloud.stream.kafka.binder.replicationFactoreklediğ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);
        }
    
    }
    

    İpucu

    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ığı öğesini kullanır DefaultAzureCredential.

    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ğıtma

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 , kod değişikliği yapmadan Spring Boot uygulamalarını Azure'a 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'e dağıtmak için bkz . İlk uygulamanızı Azure Spring Apps'e dağıtma.

Sonraki adımlar