Aracılığıyla paylaş


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.

Azure Event Hubs ad alanınızın bağlantı dizesi, Kafka için Event Hubs'a delege edilmiş erişim sağlamak amacıyla SAS kimlik doğrulaması tarafından kullanılır. Paylaşılan Erişim İmzalarını kimlik bilgileri olarak kullanmayı seçerseniz, bağlantı dizesi kendiniz yönetmeniz gerekir.

Önkoşullar

Önemli

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

Kimlik bilgilerini hazırlama

Önemli

Spring Cloud Azure 6.0.0 veya üzeri sürümlerde bağlantı dizesi kimlik doğrulaması artık desteklenmiyor. Bunun yerine parolasız bağlantılar kullanın.

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.

Uyarı

Parolasız bağlantılar kullanırken hesabınıza kaynaklara erişim vermeniz gerekir. Azure Event Hubs'da, şu anda kullanmakta olduğunuz Microsoft Entra hesabınıza Azure Event Hubs Data Receiver ve Azure Event Hubs Data Sender rollerini atayın. 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>6.0.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Uyarı

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.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 Ürün Reçetesi (BOM), <dependencyManagement> dosyanızın bölümünde 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 BOM 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 bileşeni:

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

Önemli

Spring Cloud Azure 6.0.0 veya üzeri sürümlerde bağlantı dizesi kimlik doğrulaması artık desteklenmiyor. Bunun yerine parolasız bağlantılar 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'tan bir Tüketici Grubu belirtir; bu grubun, Azure Event Hubs örneğinizi oluşturduğunuzda oluşturulan temel tüketici grubunu kullanmak üzere $Default olarak ayarlanabileceği anlamına gelir.
    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ığı öğ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ğı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 , 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