Spring Cloud Azure Kafka desteği

Spring Cloud Azure Kafka desteği, Spring uygulamalarının OAuth kimlik bilgilerini veya bağlantı dizelerini kullanarak kimlik doğrulamasına ve Azure Event Hubs bağlanmasına yardımcı olur. Bu makalede desteklenen kimlik doğrulama türleri, yapılandırma seçenekleri, bağımlılıklar ve kullanım senaryoları açıklanmaktadır.

Desteklenen Kafka sürümü

Starter'ın geçerli sürümü Apache Kafka İstemcileri 2.0.0 ile uyumludur ve Java 8 veya üzerini kullanır.

Desteklenen kimlik doğrulama türleri

Başlatıcı aşağıdaki kimlik doğrulama türlerini destekler:

  • Düz bağlantı dizesi kimlik doğrulaması
    • Doğrudan bağlantı dizesi kimlik doğrulaması
    • ARM tabanlı bağlantı dizesi kimlik doğrulaması
  • OAuth kimlik bilgileriyle kimlik doğrulama
    • Yönetilen kimlik kimlik doğrulaması
    • Kullanıcı adı/parola kimlik doğrulaması
    • Hizmet sorumlusu kimlik doğrulaması
    • kimlik doğrulaması DefaultAzureCredential

Nasıl çalışır?

OAuth kimlik bilgileriyle kimlik doğrulama

Bu bölümde Spring Cloud Azure OAuth kimlik doğrulamasının genel iş akışı açıklanmaktadır.

Spring Cloud Azure, uygulama kimlik doğrulaması yapılandırmasına bağlı olarak ilk olarak aşağıdaki kimlik bilgileri türlerinden birini oluşturur:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Uygulama bu kimlik bilgileri türlerinden birini kullanmıyorsa, uygulama özellikleri, ortam değişkenleri, yönetilen kimlik veya IDE'lerden kimlik bilgilerini almak için aracılığıyla kimlik bilgisi zincirini DefaultAzureTokenCredential kullanır. Ayrıntılı bilgi için bkz. Spring Cloud Azure kimlik doğrulaması.

Düz bağlantı dizesi kimlik doğrulaması

Bağlantı dizesi kimlik doğrulama modu için bağlantı dizesi kimlik doğrulamasını doğrudan kullanabilir veya bağlantı dizesini almak için Azure Resource Manager'ı kullanabilirsiniz. Kullanım hakkında daha fazla bilgi için Bağlantı dizesi kimlik doğrulaması için temel kullanım bölümüne bakın.

Not

Sürüm 4.3.0'dan bu yana bağlantı dizesi kimlik doğrulaması, OAuth kimlik doğrulamasına göre kullanım dışı bırakılmıştır.

Konfigürasyon

OAuth kimlik doğrulaması ile Kafka desteği kullanılırken yapılandırılabilir özellikler

Kafka için Spring Cloud Azure aşağıdaki iki yapılandırma seçeneğini destekler:

  1. Event Hubs Kafka için Spring Cloud Azure özellikleri.
  2. credentialön ekleriyle profile ve spring.cloud.azure genel kimlik doğrulama yapılandırma seçenekleri.
  3. Kafka'ya özgü düzey yapılandırmaları. Kafka düzeyinde yapılandırmalar, farklı ön eklere sahip common, consumer, producerveya admin kapsamları için Spring Boot ve Spring Cloud Stream bağlayıcıları için de kullanılabilir.

Genel özellikler com.azure.spring.cloud.autoconfigure.context.AzureGlobalPropertiesaracılığıyla kullanıma sunulur. Kafka'ya özgü özellikler org.springframework.boot.autoconfigure.kafka.KafkaProperties (Spring Boot) ve org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties (Spring Cloud Stream bağlayıcısı) aracılığıyla kullanıma sunulur.

Aşağıdaki listede desteklenen tüm yapılandırma seçenekleri gösterilmektedir.

  • Event Hubs için Spring Cloud Azure'un Kafka özellikleri.

    • Özellik: spring.cloud.azure.eventhubs.kafka.enabled
    • Açıklama: Kafka için Azure Event Hubs'a kimlik bilgisi içermeyen bağlantının etkinleştirilip etkinleştirilmeyileceği, varsayılan değer true.
  • Spring Cloud Azure genel kimlik doğrulaması yapılandırma seçenekleri

    • Ön ek: spring.cloud.azure
    • Desteklenen seçenekler: spring.cloud.azure.credential.*, spring.cloud.azure.profile.*

    Genel yapılandırma seçeneklerinin tam listesi için bkz. Genel yapılandırma özellikleri.

  • Spring Boot Kafka ortak yapılandırması

    • Ön ek: spring.kafka.properties.azure
    • Örnek: spring.kafka.properties.azure.credential.*
  • Spring Kafka tüketici yapılandırma seçenekleri

    • Ön ek: spring.kafka.consumer.properties.azure
    • Örnek: spring.kafka.consumer.properties.azure.credential.*
  • Spring Kafka üretici yapılandırma seçenekleri

    • Ön ek: spring.kafka.producer.properties.azure
    • Örnek: spring.kafka.producer.properties.azure.credential.*
  • Spring Kafka yönetici yapılandırma seçenekleri

    • Ön ek: spring.kafka.admin.properties.azure
    • Örnek: spring.kafka.admin.properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder ortak yapılandırması

    • Ön ek: spring.cloud.stream.kafka.binder.configuration.azure
    • Örnek: spring.cloud.stream.kafka.binder.configuration.azure.credential.*
  • Spring Cloud Stream Kafka Binder tüketici yapılandırması

    • Ön ek: spring.cloud.stream.kafka.binder.consumer-properties.azure
    • Örnek: spring.cloud.stream.kafka.binder.consumer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder üretici yapılandırması

    • Ön ek: spring.cloud.stream.kafka.binder.producer-properties.azure
    • Örnek: spring.cloud.stream.kafka.binder.producer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder yönetici yapılandırması

    • Ön ek: Desteklenmez, Spring Boot Kafka ortak veya yönetici yapılandırmasını kullanın.

Aşağıdaki tabloda Spring Boot Kafka ortak yapılandırma seçenekleri gösterilmektedir:

Ad Açıklama
spring.kafka.properties.azure.credential.client-certificate-password Sertifika dosyasının parolası.
spring.kafka.properties.azure.credential.client-certificate-path Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak PEM sertifika dosyasının yolu.
spring.kafka.properties.azure.credential.client-id Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci kimliği. Bu eski sistemlerden devralınan bir özelliktir.
spring.kafka.properties.azure.credential.client-secret Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci gizli dizisi. Bu, eski sistemlerden kalan bir özelliktir.
spring.kafka.properties.azure.credential.managed-identity-enabled Azure’da kimlik doğrulamak için yönetilen kimliğin etkinleştirilip etkinleştirilmeyeceği. ve client-id ayarlanırsatrue, istemci kimliği kullanıcı tarafından atanan yönetilen kimlik istemci kimliğidir. Varsayılan değer false.
spring.kafka.properties.azure.credential.password Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak parola.
spring.kafka.properties.azure.credential.username Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak kullanıcı adı.
spring.kafka.properties.azure.profile.environment.active-directory-endpoint Bağlanacak Microsoft Entra uç noktası.
spring.kafka.properties.azure.profile.tenant-id Azure kaynakları için kiracı kimliği. tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği.

Not

Farklı düzeylerdeki yapılandırma seçenekleri aşağıdaki kuralları uygular. Daha belirli yapılandırma seçeneklerinin önceliği yaygın olanlardan daha yüksektir. Örneğin:

  • Spring Kafka ortak yapılandırma seçenekleri genel seçeneklerin yerini alır.
  • Spring Kafka tüketici yapılandırma seçenekleri, ortak seçeneklerin yerini alır.
  • Spring Kafka üretici yapılandırma seçenekleri, ortak seçeneklerin yerini alır.
  • Spring Kafka yönetici yapılandırma seçenekleri, ortak seçeneklerin yerini alır.
  • Spring Cloud Stream Kafka Binder seçenekleri aynı deseni izler.

Düz bağlantı dizesi kimlik doğrulaması ile Kafka desteği kullanılırken yapılandırılabilir özellikler

Aşağıdaki tabloda Kafka için Spring Boot Event Hubs yaygın yapılandırma seçenekleri gösterilmektedir:

Mülk Açıklama
spring.cloud.azure.eventhubs.kafka.enabled Azure Event Hubs Kafka desteğinin etkinleştirilip etkinleştirilmeyileceği. Varsayılan değer true.
spring.cloud.azure.eventhubs.connection-string Azure Event Hubs bağlantı dizesi. Bağlantı dizesini doğrudan sağlamak istediğinizde bu değeri belirtin.
spring.cloud.azure.eventhubs.namespace Azure Event Hubs ad alanı. Azure Resource Manager aracılığıyla bağlantı bilgilerini almak istediğinizde bu değeri belirtin.
spring.cloud.azure.eventhubs.resource.resource-group Azure Event Hubs ad alanının kaynak grubu. Azure Resource Manager aracılığıyla bağlantı bilgilerini almak istediğinizde bu değeri belirtin.
spring.cloud.azure.profile.subscription-id Abonelik kimliği. Azure Resource Manager aracılığıyla bağlantı bilgilerini almak istediğinizde bu değeri belirtin.

Bağımlılık kurulumu

Projenize aşağıdaki bağımlılığı ekleyin. Bu bağımlılık, projenizdeki bağımlılığı otomatik olarak içerir spring-boot-starter .

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

Not

Önceki bağımlılıkla birlikte spring-cloud-azure-dependencies ürün reçetesini de eklemeyi unutmayın. Ayrıntılar için Spring Cloud Azure geliştirici kılavuzuBaşlarken bölümüne bakın.

Temel kullanım

Aşağıdaki bölümlerde klasik Spring Boot uygulaması kullanım senaryoları gösterilmektedir.

OAuth kimlik doğrulamasını kullanma

Spring Cloud Azure'un Kafka için sağladığı OAuth kimlik doğrulamasını kullandığınızda, önceki yapılandırmaları kullanarak belirli kimlik bilgilerini yapılandırabilirsiniz. Alternatif olarak, hiçbir kimlik bilgisi yapılandırmamayı seçebilirsiniz. Bu durumda Spring Cloud Azure ortamdan kimlik bilgilerini yükler. Bu bölümde, kimlik bilgilerinin Azure CLI ortamından veya Azure Spring Apps barındırma ortamından nasıl yüklenecekleri açıklanmaktadır.

Not

Azure kaynağa erişim için Microsoft Entra ID kimlik doğrulaması yapmak ve yetkilendirmek için bir güvenlik sorumlusu kullanmayı seçerseniz, güvenlik sorumlusunun Azure kaynağına erişmek için yeterli izne sahip olduğundan emin olmak için Microsoft Entra ID ile erişimi yetkilendirme bölümüne bakın.

Aşağıdaki bölümde, OAuth kimlik doğrulaması ile farklı Spring ekosistem kitaplıkları kullanan senaryolar açıklanmaktadır.

Spring Kafka uygulama desteği

Bu bölümde, Spring Kafka veya Spring Integration Kafka kitaplığını kullanan bir Spring Boot uygulamasının kullanım senaryosu açıklanmaktadır.

Bağımlılık kurulumu
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<!-- Using Spring Kafka library only-->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:2.8.6-->
</dependency>
<!-- Using Spring Integration library only -->
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:5.5.12-->
</dependency>

Yapılandırma güncelleştirmesi

OAuth kimlik doğrulamasını kullanmak için, aşağıdaki örnekte gösterildiği gibi Event Hubs uç noktasını belirtin:

spring.kafka.bootstrap-servers=<NAMESPACENAME>.servicebus.windows.net:9093

Spring Cloud Stream bağlayıcısı Kafka uygulama desteği

Bu bölümde Spring Cloud Stream bağlayıcı kafka kitaplığını kullanan Spring Boot uygulamaları için kullanım senaryosu açıklanmaktadır.

Bağımlılık kurulumu
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:3.2.3-->
</dependency>
Konfigürasyon

OAuth kimlik doğrulamasını kullanmak için, aşağıdaki örnekte gösterildiği gibi Event Hubs uç noktasını belirtin:

spring.cloud.stream.kafka.binder.brokers=<NAMESPACENAME>.servicebus.windows.net:9093

Not

4.3.0 sürümünü kullanıyorsanız, OAuth kimlik doğrulama iş akışının tamamını etkinleştirmek için spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration özelliğini ayarlayın. kafka-binder-name, tek bir Kafka bağlayıcı uygulamasında varsayılan olarak kafka durumundadır. Yapılandırma AzureKafkaSpringCloudStreamConfiguration , için KafkaBinderConfigurationPropertiesOAuth güvenlik parametrelerini belirtir. Bu yapılandırma, Azure Kimliğini etkinleştirmek için kullanılırKafkaOAuth2AuthenticateCallbackHandler.

sürümünden sonraki 4.4.0sürümler için bu özellik her Kafka bağlayıcı ortamı için otomatik olarak eklenir, bu nedenle el ile eklemeniz gerekmez.

OAuth kimlik doğrulaması için yönetilen kimlik kullanma

  1. Yönetilen kimliği kullanmak için hizmetinizde yönetilen kimliği etkinleştirin ve Azure Event Hubs Data Sender ile Azure Event Hubs Data Receiver rollerini atayın. Daha fazla bilgi için bkz.erişim hakları için Azure rolleri atama .

  2. application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
    

    Önemli

    Kullanıcı tarafından atanan yönetilen kimlik kullanıyorsanız, kullanıcı tarafından atanan yönetilen kimlik istemci kimliğinizle birlikte spring.cloud.azure.credential.client-id özelliğini de ekleyin.

Örnekler

GitHub'daki azure-spring-boot-samples depoya bakın.

Bağlantı dizesi kimlik doğrulamasını kullanın

Bağlantı dizesi kimlik doğrulamasını doğrudan kullanabilir veya bağlantı dizesini almak için Azure Resource Manager'ı kullanabilirsiniz.

  • Spring Cloud Azure 5.x
  • Spring Cloud Azure 4.x

Not

Sürüm 5.0.0'dan bu yana Spring Cloud Stream çerçevesiyle bağlantı dizesi kimlik doğrulaması kullanırken, bağlantı dizesi çalıştığından emin olmak için yine de aşağıdaki özelliğe ihtiyacınız vardır. Kafka bağlayıcı adınızı özelleştirmezseniz değeri <kafka-binder-name> şu şekilde olmalıdır kafka : spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.implementation.eventhubs.kafka.AzureEventHubsKafkaAutoConfiguration

Kullandığınız spring-cloud-dependencies sürümü 2022.0.0 ise, java.lang.IllegalStateException: kafka_context has not been refreshed yet özel durumuyla karşılaşırsınız. Bu sorunu çözmek için daha yüksek bir sürüme yükseltin.

Bağımlılık kurulumu

Apache Kafka uygulamanızı Kafka için Azure Event Hubs kullanacak şekilde geçirmek istiyorsanız aşağıdaki bağımlılıkları ekleyin.

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

Azure Resource Manager kullanarak bağlantı dizesi almak istiyorsanız aşağıdaki bağımlılığı ekleyin:

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

Konfigürasyon

Event Hubs bağlantı dizesini doğrudan kullanma

Kafka için Event Hubs'a bağlanmanın en basit yolu bağlantı dizesidir. Yalnızca aşağıdaki özelliği ekleyin.

spring.cloud.azure.eventhubs.connection-string=${AZURE_EVENTHUBS_CONNECTION_STRING}
Bağlantı dizesini almak için Azure Resource Manager'ı kullanma

Uygulamanızda bağlantı dizesini yapılandırmak istemiyorsanız, bağlantı dizesini almak için Azure Resource Manager'ı kullanabilirsiniz. Azure Resource Manager ile kimlik doğrulaması yapmak için Azure CLI'da veya Visual Studio Code veya Intellij IDEA gibi başka bir yerel geliştirme aracında depolanan kimlik bilgilerini de kullanabilirsiniz. Alternatif olarak, uygulamanız Azure Bulut'a dağıtıldıysa Yönetilen Kimlik'i kullanabilirsiniz. Sorumlunun kaynak meta verilerini okumak için yeterli izne sahip olduğundan emin olun.

Not

Azure kaynağa erişim için Microsoft Entra ID kimlik doğrulaması yapmak ve yetkilendirmek için bir güvenlik sorumlusu kullanmayı seçerseniz, güvenlik sorumlusunun Azure kaynağına erişmek için yeterli izne sahip olduğundan emin olmak için Microsoft Entra ID ile erişimi yetkilendirme bölümüne bakın.

Bağlantı dizesini almak için Azure Resource Manager'ı kullanmak için aşağıdaki özelliği eklemeniz gerekir.

spring:
  cloud:
    azure:
      profile:
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      eventhubs:
        namespace: ${AZURE_EVENTHUBS_NAMESPACE}
        resource:
          resource-group: ${AZURE_EVENTHUBS_RESOURCE_GROUP}

Örnekler

GitHub'daki azure-spring-boot-samples depoya bakın.