Stöd för Spring Cloud Azure Kafka

Stöd för Spring Cloud Azure Kafka hjälper Spring-program att autentisera och ansluta till Azure Event Hubs med hjälp av OAuth-autentiseringsuppgifter eller anslutningssträngar. Den här artikeln beskriver de autentiseringstyper, konfigurationsalternativ, beroenden och användningsscenarier som stöds.

Kafka-version som stöds

Den aktuella versionen av startprogrammet är kompatibel med Apache Kafka-klienterna 2.0.0 och använder Java 8 eller senare.

Autentiseringstyper som stöds

Startprogrammet stöder följande autentiseringstyper:

  • Autentisering med vanlig anslutningssträng
    • Direktanslutningssträngsautentisering
    • ARM-baserad anslutningssträngsautentisering
  • Autentisering med OAuth-autentiseringsuppgifter
    • Hanterad identitetsautentisering
    • Autentisering med användarnamn/lösenord
    • Autentisering med service principal
    • DefaultAzureCredential autentisering

Så här fungerar det

Autentisering med OAuth-autentiseringsuppgifter

I det här avsnittet beskrivs det övergripande arbetsflödet för Spring Cloud Azure OAuth-autentisering.

Spring Cloud Azure skapar först en av följande typer av autentiseringsuppgifter, beroende på konfigurationen för programautentisering:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Om programmet inte använder någon av dessa typer av autentiseringsuppgifter använder programmet autentiseringskedjan för DefaultAzureTokenCredential att hämta autentiseringsuppgifter från programegenskaper, miljövariabler, hanterad identitet eller IDE:er. Detaljerad information finns i Spring Cloud Azure-autentisering.

Autentisering med vanlig anslutningssträng

För autentiseringsläget med anslutningssträng kan du antingen använda autentisering med anslutningssträng direkt eller använda Azure Resource Manager för att hämta anslutningssträngen. Mer information om användningen finns i avsnittet Grundläggande användning för autentisering av anslutningssträngar.

Obs!

Eftersom version 4.3.0 är reťazec pripojenia autentisering inaktuell till förmån för OAuth-autentisering.

Konfiguration

Konfigurerbara egenskaper när du använder Kafka-stöd med OAuth-autentisering

Spring Cloud Azure for Kafka stöder följande två konfigurationsalternativ:

  1. Spring Cloud Azure för Event Hubs Kafka-egenskaper.
  2. Konfigurationsalternativen för global autentisering för credential och profile med prefix för spring.cloud.azure.
  3. Kafka-specifika nivåkonfigurationer. Kafka-nivåkonfigurationerna är också tillgängliga för Spring Boot- och Spring Cloud Stream-pärmar för common, consumer, producereller admin omfång som har olika prefix.

De globala egenskaperna är tillgängliga via com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties. Kafka-specifika egenskaper exponeras via org.springframework.boot.autoconfigure.kafka.KafkaProperties (Spring Boot) och org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties (Spring Cloud Stream binder).

I följande lista visas alla konfigurationsalternativ som stöds.

  • Spring Cloud Azure för Event Hubs Kafka-egenskaper.

    • Egenskap: spring.cloud.azure.eventhubs.kafka.enabled
    • Beskrivning: om anslutning utan autentiseringsuppgifter till Azure Event Hubs för Kafka ska aktiveras; standardvärdet är true.
  • Konfigurationsalternativ för global autentisering i Spring Cloud Azure

    • Prefix: spring.cloud.azure
    • Alternativ som stöds: spring.cloud.azure.credential.*, spring.cloud.azure.profile.*

    En fullständig lista över globala konfigurationsalternativ finns i Globala konfigurationsegenskaper.

  • Vanliga konfigurationer för Spring Boot Kafka

    • Prefix: spring.kafka.properties.azure
    • Exempel: spring.kafka.properties.azure.credential.*
  • Konfigurationsalternativ för Spring Kafka-konsumenter

    • Prefix: spring.kafka.consumer.properties.azure
    • Exempel: spring.kafka.consumer.properties.azure.credential.*
  • Konfigurationsalternativ för Spring Kafka-producent

    • Prefix: spring.kafka.producer.properties.azure
    • Exempel: spring.kafka.producer.properties.azure.credential.*
  • Konfigurationsalternativ för Spring Kafka-administratör

    • Prefix: spring.kafka.admin.properties.azure
    • Exempel: spring.kafka.admin.properties.azure.credential.*
  • Gemensam konfiguration för Spring Cloud Stream Kafka Binder

    • Prefix: spring.cloud.stream.kafka.binder.configuration.azure
    • Exempel: spring.cloud.stream.kafka.binder.configuration.azure.credential.*
  • Spring Cloud Stream Kafka Binder-konsumentkonfiguration

    • Prefix: spring.cloud.stream.kafka.binder.consumer-properties.azure
    • Exempel: spring.cloud.stream.kafka.binder.consumer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder-producentkonfiguration

    • Prefix: spring.cloud.stream.kafka.binder.producer-properties.azure
    • Exempel: spring.cloud.stream.kafka.binder.producer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder-administratörskonfiguration

    • Prefix: Stöds inte, använd Vanlig Spring Boot Kafka-konfiguration eller administratörskonfiguration.

I följande tabell visas vanliga konfigurationsalternativ för Spring Boot Kafka:

Namn Beskrivning
spring.kafka.properties.azure.credential.client-certificate-password Lösenord för certifikatfilen.
spring.kafka.properties.azure.credential.client-certificate-path Sökväg till en PEM-certifikatfil som ska användas vid autentisering med ett tjänsthuvudnamn mot Azure.
spring.kafka.properties.azure.credential.client-id Klient-ID som ska användas vid autentisering med tjänstens huvudnamn med Azure. Det här är en äldre egenskap.
spring.kafka.properties.azure.credential.client-secret Klienthemlighet som ska användas för autentisering med service principal i Azure. Det här är en äldre egenskap.
spring.kafka.properties.azure.credential.managed-identity-enabled Om du vill aktivera hanterad identitet för att autentisera med Azure. Om true och client-id anges är klient-ID:t det användartilldelade klient-ID:t för hanterad identitet. Standardvärdet är false.
spring.kafka.properties.azure.credential.password Lösenord som ska användas när du utför autentisering med användarnamn/lösenord med Azure.
spring.kafka.properties.azure.credential.username Användarnamn som ska användas när du utför autentisering med användarnamn/lösenord med Azure.
spring.kafka.properties.azure.profile.environment.active-directory-endpoint Den Microsoft Entra-slutpunkt som ska anslutas till.
spring.kafka.properties.azure.profile.tenant-id Klientorganisations-ID för Azure-resurser. De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID.

Obs!

Konfigurationsalternativen på olika nivåer tillämpar följande regler. De mer specifika konfigurationsalternativen har högre prioritet än de vanliga. Till exempel:

  • Vanliga konfigurationsalternativ för Spring Kafka ersätter de globala alternativen.
  • Spring Kafka-konsumentkonfigurationsalternativ ersätter de vanliga alternativen.
  • Spring Kafka-producentkonfigurationsalternativ ersätter de vanliga alternativen.
  • Spring Kafka-administratörskonfigurationsalternativ ersätter de vanliga alternativen.
  • Spring Cloud Stream Kafka Binder-alternativen följer samma mönster.

Konfigurerbara egenskaper när du använder Kafka-stöd med autentisering med oformaterad anslutningssträng

I följande tabell visas vanliga konfigurationsalternativ för Spring Boot Event Hubs för Kafka:

Egenskap Beskrivning
spring.cloud.azure.eventhubs.kafka.enabled Om du vill aktivera Azure Event Hubs Kafka-stöd. Standardvärdet är true.
spring.cloud.azure.eventhubs.connection-string Anslutningssträng för Azure Event Hubs. Ange det här värdet när du vill ange anslutningssträngen direkt.
spring.cloud.azure.eventhubs.namespace Azure Event Hubs-namnrymd. Ange det här värdet när du vill hämta anslutningsinformationen via Azure Resource Manager.
spring.cloud.azure.eventhubs.resource.resource-group Resursgruppen för Azure Event Hubs-namnområdet. Ange det här värdet när du vill hämta anslutningsinformationen via Azure Resource Manager.
spring.cloud.azure.profile.subscription-id Prenumerations-ID. Ange det här värdet när du vill hämta anslutningsinformationen via Azure Resource Manager.

Konfiguration av beroenden

Lägg till följande beroende i projektet. Det här beroendet inkluderar automatiskt beroendet spring-boot-starter i ditt projekt.

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

Obs!

Kom ihåg att lägga till BOM spring-cloud-azure-dependencies tillsammans med föregående beroende. Mer information finns i avsnittet Komma igång i utvecklarguiden Spring Cloud Azure.

Grundläggande användning

I följande avsnitt visas de klassiska Användningsscenarierna för Spring Boot-program.

Använda OAuth-autentisering

När du använder OAuth-autentiseringen som Spring Cloud Azure tillhandahåller för Kafka kan du konfigurera specifika autentiseringsuppgifter med hjälp av föregående konfigurationer. Du kan också välja att inte konfigurera några autentiseringsuppgifter. I det här fallet läser Spring Cloud Azure in autentiseringsuppgifterna från miljön. I det här avsnittet beskrivs hur du läser in autentiseringsuppgifter från Azure CLI-miljön eller Azure Spring Apps värdmiljön.

Obs!

Om du väljer att använda ett säkerhetsobjekt för att autentisera och auktorisera med Microsoft Entra ID för åtkomst till en Azure resurs kan du läsa avsnittet Auktorisera åtkomst med Microsoft Entra ID för att säkerställa att säkerhetsobjektet har tillräcklig behörighet för att komma åt Azure resursen.

I följande avsnitt beskrivs scenarier som använder olika Spring-ekosystembibliotek med OAuth-autentisering.

Stöd för Spring Kafka-program

I det här avsnittet beskrivs användningsscenariot för ett Spring Boot-program som använder Spring Kafka eller Spring Integration Kafka-biblioteket.

Konfiguration av beroenden
<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>

Konfigurationsuppdatering

Om du vill använda OAuth-autentisering anger du Event Hubs-slutpunkten enligt följande exempel:

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

Stöd för Spring Cloud Stream-binder för Kafka-applikationer

I det här avsnittet beskrivs användningsscenariot för Spring Boot-program som använder Spring Cloud Stream-binder Kafka-biblioteket.

Konfiguration av beroenden
<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>
Konfiguration

Om du vill använda OAuth-autentisering anger du Event Hubs-slutpunkten enligt följande exempel:

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

Obs!

Om du använder version 4.3.0anger du spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration egenskapen för att aktivera hela arbetsflödet för OAuth-autentisering. kafka-binder-name är kafka som standard i ett program med en enda Kafka-binder. Konfigurationen AzureKafkaSpringCloudStreamConfiguration anger OAuth-säkerhetsparametrarna för KafkaBinderConfigurationProperties. Den här konfigurationen används i KafkaOAuth2AuthenticateCallbackHandler för att aktivera Azure identitet.

För versioner efter 4.4.0läggs den här egenskapen till automatiskt för varje Kafka-bindemedelsmiljö, så du behöver inte lägga till den manuellt.

Använda hanterad identitet för OAuth-autentisering

  1. Om du vill använda hanterad identitet aktiverar du hanterad identitet för din tjänst och tilldelar rollerna Azure Event Hubs Data Receiver och Azure Event Hubs Data Sender . Mer information finns i Tilldela Azure-roller för åtkomsträttigheter.

  2. Konfigurera följande egenskaper i din application.yml-fil:

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

    Viktig

    Om du använder användartilldelad hanterad identitet lägger du även till egenskapen spring.cloud.azure.credential.client-id med ditt användartilldelade klient-ID för hanterad identitet.

Exempel

Se lagringsplatsen azure-spring-boot-samples på GitHub.

Använda autentisering med anslutningssträngar

Du kan använda anslutningssträngsautentisering direkt eller använda Azure Resource Manager för att hämta anslutningssträngen.

Obs!

Sedan version 5.0.0 behöver du fortfarande följande inställning när du använder autentisering med anslutningssträng i Spring Cloud Stream framework, för att säkerställa att anslutningssträngen fungerar. Värdet på <kafka-binder-name> bör vara kafka om du inte anpassar ditt Kafka-binder-namn: spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.implementation.eventhubs.kafka.AzureEventHubsKafkaAutoConfiguration

Om den version av spring-cloud-dependencies du använder är 2022.0.0får du undantaget java.lang.IllegalStateException: kafka_context has not been refreshed yet. Lös problemet genom att uppgradera till en högre version.

Konfiguration av beroenden

Lägg till följande beroenden om du vill migrera ditt Apache Kafka-program för att använda Azure Event Hubs för Kafka.

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

Om du vill hämta reťazec pripojenia med hjälp av Azure Resource Manager lägger du till följande beroende:

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

Konfiguration

Använd Event Hubs-anslutningssträngen direkt

Det enklaste sättet att ansluta till Event Hubs för Kafka är med anslutningssträngen. Lägg bara till följande egenskap.

spring.cloud.azure.eventhubs.connection-string=${AZURE_EVENTHUBS_CONNECTION_STRING}
Använda Azure Resource Manager för att hämta anslutningssträngen

Om du inte vill konfigurera anslutningssträngen i ditt program kan du använda Azure Resource Manager för att hämta anslutningssträngen. Om du vill autentisera med Azure Resource Manager kan du också använda autentiseringsuppgifter som lagras i Azure CLI eller något annat lokalt utvecklingsverktyg som Visual Studio Code eller Intellij IDEA. Alternativt kan du använda Hanterad identitet om ditt program distribueras till Azure Cloud. Se bara till att huvudnamnet har tillräcklig behörighet för att läsa resursmetadata.

Obs!

Om du väljer att använda ett säkerhetsobjekt för att autentisera och auktorisera med Microsoft Entra ID för åtkomst till en Azure resurs kan du läsa avsnittet Auktorisera åtkomst med Microsoft Entra ID för att säkerställa att säkerhetsobjektet har tillräcklig behörighet för att komma åt Azure resursen.

Om du vill använda Azure Resource Manager för att hämta anslutningssträngen lägger du bara till följande egenskap.

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

Exempel

Se lagringsplatsen azure-spring-boot-samples på GitHub.