Ondersteuning voor Spring Cloud Azure Kafka

Ondersteuning voor Spring Cloud Azure Kafka helpt Spring-toepassingen bij het verifiëren en maken van verbinding met Azure Event Hubs met behulp van OAuth-referenties of verbindingsreeksen. In dit artikel worden de ondersteunde verificatietypen, configuratieopties, afhankelijkheden en gebruiksscenario's beschreven.

Ondersteunde Kafka-versie

De huidige versie van de starter is compatibel met Apache Kafka-clients 2.0.0 en gebruikt Java 8 of hoger.

Ondersteunde verificatietypen

De starter ondersteunt de volgende verificatietypen:

  • Authenticatie met een gewone verbindingsreeks
    • Directe verificatie van verbindingsreeksen
    • Verificatie met een ARM-gebaseerde verbindingsreeks
  • Verificatie van OAuth-referenties
    • Verificatie van beheerde identiteit
    • Verificatie van gebruikersnaam/wachtwoord
    • Authenticatie van service-principals
    • DefaultAzureCredential verificatie

Hoe het werkt

Verificatie van OAuth-referenties

In deze sectie wordt de algehele werkstroom van Spring Cloud Azure OAuth-verificatie beschreven.

Spring Cloud Azure bouwt eerst een van de volgende typen referenties, afhankelijk van de configuratie van de toepassingsverificatie:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Als de toepassing geen van deze typen referenties gebruikt, gebruikt de toepassing de referentieketen DefaultAzureTokenCredential om referenties op te halen uit toepassingseigenschappen, omgevingsvariabelen, beheerde identiteit of IDE's. Zie Spring Cloud Azure-verificatievoor gedetailleerde informatie.

Authenticatie met een gewone verbindingsreeks

Voor de verificatiemodus voor verbindingsreeksen kunt u verificatie van verbindingsreeksen rechtstreeks gebruiken of Azure Resource Manager gebruiken om de verbindingsreeks op te halen. Zie de sectie Basisgebruik voor verificatie van verbindingsreeksen voor meer informatie over het gebruik.

Notitie

Sinds versie 4.3.0 wordt verbindingsreeks verificatie afgeschaft ten gunste van OAuth-verificatie.

Configuratie

Configureerbare eigenschappen bij het gebruik van Kafka-ondersteuning met OAuth-verificatie

Spring Cloud Azure voor Kafka ondersteunt de volgende twee configuratieopties:

  1. Eigenschappen van Spring Cloud Azure voor Event Hubs Kafka.
  2. De algemene configuratieopties voor verificatie van credential en profile met voorvoegsels van spring.cloud.azure.
  3. Kafka-specifieke configuraties. De configuraties op Kafka-niveau zijn ook beschikbaar voor Spring Boot- en Spring Cloud Stream-binders voor de scopes common, consumer, producer of admin, die verschillende voorvoegsels hebben.

De globale eigenschappen worden weergegeven via com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties. De kafka-specifieke eigenschappen worden weergegeven via org.springframework.boot.autoconfigure.kafka.KafkaProperties (Spring Boot) en org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties (Spring Cloud Stream-binder).

De volgende lijst bevat alle ondersteunde configuratieopties.

  • Eigenschappen van Spring Cloud Azure voor Event Hubs Kafka.

    • Eigenschap: spring.cloud.azure.eventhubs.kafka.enabled
    • Beschrijving: of u een gratis referentieverbinding met Azure Event Hubs voor Kafka wilt inschakelen, de standaardwaarde is true.
  • De configuratieopties voor globale verificatie van Spring Cloud Azure

    • Voorvoegsel: spring.cloud.azure
    • Ondersteunde opties: spring.cloud.azure.credential.*, spring.cloud.azure.profile.*

    Zie algemene configuratie-eigenschappenvoor de volledige lijst met algemene configuratieopties.

  • Algemene configuratie van Spring Boot Kafka

    • Voorvoegsel: spring.kafka.properties.azure
    • Voorbeeld: spring.kafka.properties.azure.credential.*
  • Configuratieopties voor Spring Kafka-consumenten

    • Voorvoegsel: spring.kafka.consumer.properties.azure
    • Voorbeeld: spring.kafka.consumer.properties.azure.credential.*
  • Configuratieopties voor Spring Kafka-producenten

    • Voorvoegsel: spring.kafka.producer.properties.azure
    • Voorbeeld: spring.kafka.producer.properties.azure.credential.*
  • Configuratieopties voor Spring Kafka-beheerders

    • Voorvoegsel: spring.kafka.admin.properties.azure
    • Voorbeeld: spring.kafka.admin.properties.azure.credential.*
  • Algemene configuratie van Spring Cloud Stream Kafka Binder

    • Voorvoegsel: spring.cloud.stream.kafka.binder.configuration.azure
    • Voorbeeld: spring.cloud.stream.kafka.binder.configuration.azure.credential.*
  • Spring Cloud Stream Kafka Binder-consumentenconfiguratie

    • Voorvoegsel: spring.cloud.stream.kafka.binder.consumer-properties.azure
    • Voorbeeld: spring.cloud.stream.kafka.binder.consumer-properties.azure.credential.*
  • Producentconfiguratie van Spring Cloud Stream Kafka Binder

    • Voorvoegsel: spring.cloud.stream.kafka.binder.producer-properties.azure
    • Voorbeeld: spring.cloud.stream.kafka.binder.producer-properties.azure.credential.*
  • Adminconfiguratie van Spring Cloud Stream Kafka Binder

    • Voorvoegsel: Niet ondersteund, gebruik algemene configuratie of beheerconfiguratie van Spring Boot Kafka.

In de volgende tabel ziet u de algemene configuratieopties voor Spring Boot Kafka:

Naam Beschrijving
spring.kafka.properties.azure.credential.client-certificate-password Wachtwoord van het certificaatbestand.
spring.kafka.properties.azure.credential.client-certificate-path Pad van een PEM-certificaatbestand dat moet worden gebruikt bij het uitvoeren van service-principalverificatie met Azure.
spring.kafka.properties.azure.credential.client-id Client-id die moet worden gebruikt bij het uitvoeren van service-principalverificatie met Azure. Dit is een verouderde property.
spring.kafka.properties.azure.credential.client-secret Clientgeheim dat moet worden gebruikt bij het uitvoeren van service-principal-verificatie met Azure. Dit is een verouderde eigenschap.
spring.kafka.properties.azure.credential.managed-identity-enabled Of beheerde identiteit moet worden ingeschakeld voor verificatie bij Azure. Als true en de client-id is ingesteld, is de client-id de client-id van de door de gebruiker toegewezen beheerde identiteit. De standaardwaarde is false.
spring.kafka.properties.azure.credential.password Wachtwoord dat moet worden gebruikt bij het uitvoeren van verificatie van gebruikersnaam en wachtwoord met Azure.
spring.kafka.properties.azure.credential.username Gebruikersnaam die moet worden gebruikt bij het uitvoeren van verificatie met gebruikersnaam en wachtwoord met Azure.
spring.kafka.properties.azure.profile.environment.active-directory-endpoint Het Microsoft Entra-eindpunt waarmee verbinding moet worden gemaakt.
spring.kafka.properties.azure.profile.tenant-id Tenant-id voor Azure-resources. De waarden die zijn toegestaan voor tenant-id zijn: common, organizations, consumersof de tenant-id.

Notitie

De configuratieopties op verschillende niveaus hanteren de volgende regels. De meer specifieke configuratieopties hebben een hogere prioriteit dan de algemene opties. Bijvoorbeeld:

  • Algemene configuratieopties van Spring Kafka vervangen de algemene opties.
  • Spring Kafka-configuratieopties vervangen de algemene opties.
  • Spring Kafka-configuratieopties vervangen de algemene opties.
  • Configuratieopties voor Spring Kafka-beheerders vervangen de algemene opties.
  • De Opties voor Spring Cloud Stream Kafka Binder volgen hetzelfde patroon.

Configureerbare eigenschappen bij gebruik van Kafka-ondersteuning met authenticatie via een eenvoudige verbindingsreeks

In de volgende tabel ziet u de algemene configuratieopties voor Spring Boot Event Hubs voor Kafka:

Eigenschap Beschrijving
spring.cloud.azure.eventhubs.kafka.enabled Of u ondersteuning voor Azure Event Hubs Kafka wilt inschakelen. De standaardwaarde is true.
spring.cloud.azure.eventhubs.connection-string Azure Event Hubs-verbindingsreeks. Geef deze waarde op wanneer u de verbindingsreeks rechtstreeks wilt opgeven.
spring.cloud.azure.eventhubs.namespace Azure Event Hubs-naamruimte. Geef deze waarde op wanneer u de verbindingsgegevens wilt ophalen via Azure Resource Manager.
spring.cloud.azure.eventhubs.resource.resource-group De resourcegroep van de Azure Event Hubs-naamruimte. Geef deze waarde op wanneer u de verbindingsgegevens wilt ophalen via Azure Resource Manager.
spring.cloud.azure.profile.subscription-id De id van het abonnement. Geef deze waarde op wanneer u de verbindingsgegevens wilt ophalen via Azure Resource Manager.

Afhankelijkheid instellen

Voeg de volgende afhankelijkheid toe aan uw project. Deze afhankelijkheid bevat automatisch de spring-boot-starter afhankelijkheid in uw project.

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

Notitie

Vergeet niet om naast de bovenstaande afhankelijkheid ook de BOM spring-cloud-azure-dependencies toe te voegen. Zie de sectie Aan de slag van de Spring Cloud Azure-ontwikkelaarshandleidingvoor meer informatie.

Basisgebruik

In de volgende secties ziet u de klassieke gebruiksscenario's voor Spring Boot-toepassingen.

OAuth-verificatie gebruiken

Wanneer u de OAuth-verificatie gebruikt die door Spring Cloud Azure voor Kafka wordt geboden, kunt u specifieke referenties configureren met behulp van de voorgaande configuraties. U kunt er ook voor kiezen om geen inloggegevens te configureren. In dit geval laadt Spring Cloud Azure de inloggegevens vanuit de omgeving. In deze sectie wordt beschreven hoe u referenties laadt vanuit de Azure CLI-omgeving of de Azure Spring Apps hostingomgeving.

Notitie

Als u ervoor kiest om een beveiligingsprincipaal te gebruiken om te verifiëren en autoriseren met Microsoft Entra ID voor toegang tot een Azure resource, raadpleegt u de sectie Toegang autoriseren met Microsoft Entra ID om ervoor te zorgen dat de beveiligingsprincipaal voldoende machtigingen heeft voor toegang tot de Azure resource.

In de volgende sectie worden scenario's beschreven die gebruikmaken van verschillende Spring-ecosysteembibliotheken met OAuth-verificatie.

Ondersteuning voor Spring Kafka-toepassingen

In deze sectie wordt het gebruiksscenario beschreven voor een Spring Boot-toepassing die gebruikmaakt van Spring Kafka of de Spring Integration Kafka-bibliotheek.

Afhankelijkheid instellen
<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>

Update van de configuratie

Als u OAuth-verificatie wilt gebruiken, geeft u het Event Hubs-eindpunt op, zoals wordt weergegeven in het volgende voorbeeld:

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

Ondersteuning voor Kafka-toepassing voor Spring Cloud Stream-binder

In deze sectie wordt het gebruiksscenario beschreven voor Spring Boot-toepassingen die gebruikmaken van de Kafka-bibliotheek van Spring Cloud Stream.

Afhankelijkheid instellen
<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>
Configuratie

Als u OAuth-verificatie wilt gebruiken, geeft u het Event Hubs-eindpunt op, zoals wordt weergegeven in het volgende voorbeeld:

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

Notitie

Als u versie 4.3.0gebruikt, stelt u de spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration eigenschap in om de volledige OAuth-verificatiewerkstroom in te schakelen. De kafka-binder-name is standaard kafka in een toepassing met één Kafka-binder. De configuratie AzureKafkaSpringCloudStreamConfiguration geeft de OAuth-beveiligingsparameters voor KafkaBinderConfigurationProperties. Deze configuratie wordt in KafkaOAuth2AuthenticateCallbackHandler gebruikt om Azure Identity in te schakelen.

Voor versies hierna 4.4.0wordt deze eigenschap automatisch toegevoegd voor elke Kafka-binderomgeving, dus u hoeft deze niet handmatig toe te voegen.

Beheerde identiteit gebruiken voor OAuth-verificatie

  1. Als u beheerde identiteit wilt gebruiken, schakelt u beheerde identiteit voor uw service in en wijst u de Azure Event Hubs Data Receiver en Azure Event Hubs Data Sender rollen toe. Zie Azure-rollen toewijzen voor toegangsrechtenvoor meer informatie.

  2. Configureer de volgende eigenschappen in uw application.yml-bestand:

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

    Belangrijk

    Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, voegt u ook de eigenschap spring.cloud.azure.credential.client-id toe met de client-id van uw door de gebruiker toegewezen beheerde identiteit.

Voorbeelden

Bekijk de azure-spring-boot-samples opslagplaats op GitHub.

Authenticatie met een verbindingsreeks gebruiken

U kunt verificatie van verbindingsreeksen rechtstreeks gebruiken of Azure Resource Manager gebruiken om de verbindingsreeks op te halen.

Notitie

Sinds versie 5.0.0 hebt u bij het gebruik van verbindingsreeks verificatie met Spring Cloud Stream-framework nog steeds de volgende eigenschap nodig om ervoor te zorgen dat de verbindingsreeks werkt. De waarde van kafka moet <kafka-binder-name> zijn als u de naam van uw Kafka-binder niet aanpast: spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.implementation.eventhubs.kafka.AzureEventHubsKafkaAutoConfiguration

Als de versie van spring-cloud-dependencies die u gebruikt 2022.0.0 is, treedt de uitzondering java.lang.IllegalStateException: kafka_context has not been refreshed yet op. Voer een upgrade uit naar een hogere versie om dit probleem op te lossen.

Afhankelijkheid instellen

Voeg de volgende afhankelijkheden toe als u uw Apache Kafka-toepassing wilt migreren om Azure Event Hubs voor Kafka te gebruiken.

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

Als u de verbindingsreeks wilt ophalen met behulp van Azure Resource Manager, voegt u de volgende afhankelijkheid toe:

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

Configuratie

Event Hubs-verbindingsreeks rechtstreeks gebruiken

De eenvoudigste manier om verbinding te maken met Event Hubs voor Kafka is met de verbindingsreeks. Voeg gewoon de volgende eigenschap toe.

spring.cloud.azure.eventhubs.connection-string=${AZURE_EVENTHUBS_CONNECTION_STRING}
Azure Resource Manager gebruiken om de verbindingsreeks op te halen

Als u de verbindingsreeks niet wilt configureren in uw toepassing, kunt u Azure Resource Manager gebruiken om de verbindingsreeks op te halen. Voor verificatie met Azure Resource Manager kunt u ook referenties gebruiken die zijn opgeslagen in Azure CLI of een ander lokaal ontwikkelprogramma, zoals Visual Studio Code of Intellij IDEA. U kunt ook Managed Identity gebruiken als uw toepassing is geïmplementeerd in Azure Cloud. Zorg ervoor dat de principal voldoende machtigingen heeft om metagegevens van resources te lezen.

Notitie

Als u ervoor kiest om een beveiligingsprincipaal te gebruiken om te verifiëren en autoriseren met Microsoft Entra ID voor toegang tot een Azure resource, raadpleegt u de sectie Toegang autoriseren met Microsoft Entra ID om ervoor te zorgen dat de beveiligingsprincipaal voldoende machtigingen heeft voor toegang tot de Azure resource.

Als u Azure Resource Manager wilt gebruiken om de verbindingsreeks op te halen, voegt u de volgende eigenschap toe.

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

Voorbeelden

Bekijk de azure-spring-boot-samples opslagplaats op GitHub.