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 Azure Event Hubs gebruiken vanuit Apache Kafka-toepassingen voor meer informatie
In deze zelfstudie bevatten we twee verificatiemethoden: Microsoft Entra-verificatie en SAS-verificatie (Shared Access Signatures). Op het tabblad Wachtwoordloos ziet u de Microsoft Entra-verificatie en op het tabblad Verbindingsreeks wordt de SAS-verificatie weergegeven.
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 op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.
SAS-verificatie maakt gebruik van de verbindingsreeks van uw Azure Event Hubs-naamruimte voor de gedelegeerde toegang tot Event Hubs voor Kafka. Als u Shared Access Signatures als referenties wilt gebruiken, moet u de verbindingsreeks zelf beheren.
Vereisten
Een Azure-abonnement (u kunt een gratis abonnement maken).
Java Development Kit (JDK) versie 8 of hoger.
Apache Maven, versie 3.2 of hoger.
cURL of een vergelijkbaar HTTP-hulpprogramma om de functionaliteit te testen.
Azure Cloud Shell of Azure CLI 2.37.0 of hoger.
Een Azure Event Hub. Als u er nog geen hebt, maakt u een Event Hub met behulp van Azure Portal.
Een Spring Boot-toepassing. Als u er nog geen hebt, maakt u een Maven-project met de Spring Initializr. Zorg ervoor dat u Maven-project selecteert en onder Afhankelijkheden spring web, Spring voor Apache Kafka en Cloud Stream-afhankelijkheden toevoegt en vervolgens Java-versie 8 of hoger selecteert.
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 op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om machtigingen te verlenen aan een beveiligingsprincipaal. Dit kan een gebruiker of toepassingsservice-principal zijn.
Als u dit voorbeeld lokaal wilt uitvoeren met Microsoft Entra-verificatie, moet u ervoor zorgen dat uw gebruikersaccount is geverifieerd via de Azure Toolkit voor IntelliJ, de Azure-accountinvoegtoepassing van Visual Studio Code of de 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 Azure Event Hubs Data Receiver
en Azure Event Hubs Data Sender
rol toe aan het Microsoft Entra-account dat u momenteel gebruikt. Zie Azure-rollen toewijzen met behulp van Azure Portal en Toegang tot Event Hubs-resources autoriseren met behulp van Microsoft Entra ID voor meer informatie over het verlenen van toegangsrollen.
Berichten verzenden en ontvangen van Azure Event Hubs
Met een Azure Event Hub kunt u berichten verzenden en ontvangen met Spring Cloud Azure.
Als u de Spring Cloud Azure Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Notitie
Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependencies
versie instellen op4.19.0
. Deze stuklijst (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.
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}
Tip
Als u versie
spring-cloud-azure-dependencies:4.3.0
gebruikt, moet u de eigenschapspring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
toevoegen met de waardecom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
.Omdat
4.4.0
deze 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
Hiermee geeft u het Azure Event Hubs-eindpunt op. 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 van Azure Event Hubs op, waarop u kunt instellen $Default
om de basisconsumentengroep 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.replicationFactor
toevoegen, waarbij de waarde is ingesteld op ten minste 1. Zie de referentiehandleiding voor Spring Cloud Stream Kafka Binder voor meer informatie.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); } }
Tip
In deze zelfstudie zijn er 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 Identity gebruiken. Spring Cloud Azure maakt gebruik
DefaultAzureCredential
van, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder dat er codewijzigingen zijn aangebracht.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? voor meer informatie.
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. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen 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 uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.