Delen via


Spring Kafka gebruiken met Azure Event Hubs voor Kafka-API

In deze zelfstudie leert u hoe u een op Java gebaseerde Spring Cloud Stream Binder configureert voor het gebruik van Azure Event Hubs voor Kafka voor het verzenden en ontvangen van berichten met Azure Event Hubs. Zie voor meer informatie Use Azure Event Hubs from Apache Kafka applications

In deze zelfstudie bevatten we twee verificatiemethoden: Microsoft Entra-verificatie en Shared Access Signatures (SAS) verificatie. Op het tabblad Passwordless ziet u de Microsoft Entra-verificatie en de Connection-tekenreeks de SAS-verificatie.

Microsoft Entra verificatie is een mechanisme voor het maken van verbinding met Azure Event Hubs voor Kafka met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra ID. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services beheren op een centrale locatie, wat het beheer van machtigingen vereenvoudigt.

SAS-verificatie maakt gebruik van de connection string van uw Azure Event Hubs-naamruimte voor de gedelegeerde toegang tot Event Hubs voor Kafka. Als u ervoor kiest om Shared Access Signatures als referenties te gebruiken, moet u de connection string zelf beheren.

Vereisten

Belangrijk

Spring Boot versie 2.5 of hoger is vereist om de stappen in deze zelfstudie uit te voeren.

Referenties voorbereiden

Azure Event Hubs ondersteunt het gebruik van Microsoft Entra ID om aanvragen voor Event Hubs-resources te autoriseren. Met Microsoft Entra ID kunt u Azure op rollen gebaseerd toegangsbeheer (Azure RBAC) gebruiken om machtigingen te verlenen aan een security-principal, mogelijk een gebruiker of toepassingsservice-principal.

Als u dit voorbeeld lokaal wilt uitvoeren met Microsoft Entra verificatie, moet u ervoor zorgen dat uw gebruikersaccount is geverifieerd via Azure Toolkit voor IntelliJ, Visual Studio Code Azure accountinvoegtoepassing of Azure CLI. Zorg er ook voor dat het account voldoende machtigingen heeft gekregen.

Notitie

Wanneer u wachtwoordloze verbindingen gebruikt, moet u uw account toegang verlenen tot resources. Wijs in Azure Event Hubs de rol Azure Event Hubs Data Receiver en Azure Event Hubs Data Sender toe aan het Microsoft Entra account dat u momenteel gebruikt. Voor meer informatie over het verlenen van toegangsrollen, zie Assign Azure roles using the Azure portal en Authorize access to Event Hubs resources using Microsoft Entra ID.

Berichten verzenden en ontvangen van Azure Event Hubs

Met een Azure Event Hub kunt u berichten verzenden en ontvangen met behulp van Spring Cloud Azure.

Als u de Spring Cloud Azure Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan het bestand pom.xml:

  • De Spring Cloud Azure Stuklijst (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.1.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Notitie

    Als u Spring Boot 4.0.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 7.1.0.

    Als u Spring Boot 3.5.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 6.1.0.

    Als u Spring Boot 3.1.x-3.5.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 5.25.0.

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.20.0.

    Deze BOM (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud-Azure afhankelijkheden dezelfde versie gebruiken.

    Zie Welke Versie van Spring Cloud Azure Moet Ik Gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Starter-artefact:

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

De toepassing coderen

Gebruik de volgende stappen om uw toepassing te configureren voor het produceren en gebruiken van berichten met behulp van Azure Event Hubs.

  1. Configureer de Event Hub-referenties door de volgende eigenschappen toe te voegen aan het bestand application.properties .

    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}
    

    Aanbeveling

    Als u versie spring-cloud-azure-dependencies:4.3.0gebruikt, moet u de eigenschap spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources toevoegen met de waarde com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.

    Omdat 4.4.0deze eigenschap automatisch wordt toegevoegd, hoeft u deze dus niet handmatig toe te voegen.

    In de volgende tabel worden de velden in de configuratie beschreven:

    Veld Beschrijving
    spring.cloud.stream.kafka.binder.brokers Specificeert de Azure Event Hubs endpoint.
    spring.cloud.stream.bindings.consume-in-0.destination Hiermee geeft u de event hub voor de invoerbestemming op, die voor deze zelfstudie de hub is die u eerder hebt gemaakt.
    spring.cloud.stream.bindings.consume-in-0.group Hiermee geeft u een consumentengroep op van Azure Event Hubs, die u kunt instellen op $Default om de basisconsumentgroep te gebruiken die is gemaakt toen u uw Azure Event Hubs-exemplaar maakte.
    spring.cloud.stream.bindings.supply-out-0.destination Hiermee geeft u de event hub voor de uitvoerbestemming op, die voor deze zelfstudie hetzelfde is als de invoerbestemming.

    Notitie

    Als u het automatisch maken van onderwerpen inschakelt, moet u het configuratie-item spring.cloud.stream.kafka.binder.replicationFactortoevoegen, waarbij de waarde is ingesteld op ten minste 1. Zie de referentiehandleiding voor Spring Cloud Stream Kafka Binder voor meer informatie.

  2. Bewerk het opstartklassebestand om de volgende inhoud weer te geven.

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

    Aanbeveling

    In deze handleiding vindt u geen verificatiebewerkingen in de configuraties of de code. Voor het maken van verbinding met Azure-services is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u Azure Identiteit gebruiken. Spring Cloud Azure maakt gebruik van DefaultAzureCredential, die de Azure Identity-bibliotheek biedt om u te helpen referenties te verkrijgen zonder codewijzigingen.

    DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (zoals lokale en productieomgevingen) zonder omgevingsspecifieke code te implementeren. Zie DefaultAzureCredential voor meer informatie.

    Als u de verificatie in lokale ontwikkelomgevingen wilt voltooien, kunt u Azure CLI, Visual Studio Code, PowerShell of andere methoden gebruiken. Zie Azure-verificatie in Java ontwikkelomgevingen voor meer informatie. Als u de verificatie in Azure hostingomgevingen wilt voltooien, raden we u aan om een door de gebruiker toegewezen beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure resources?

  3. Start de toepassing. Berichten zoals het volgende voorbeeld worden in uw toepassingslogboek geplaatst:

    Kafka version: 3.0.1
    Kafka commitId: 62abe01bee039651
    Kafka startTimeMs: 1622616433956
    New message received: 'Hello World'
    

Implementeren in Azure Spring Apps

Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Azure Spring Apps maakt het eenvoudig om Spring Boot-toepassingen te implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met behulp van uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren voor Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.

Volgende stappen