Verwenden von Spring Kafka mit Azure Event Hubs für Kafka-API
In diesem Lernprogramm erfahren Sie, wie Sie einen javabasierten Spring Cloud Stream Binder so konfigurieren, dass Azure Event Hubs für Kafka zum Senden und Empfangen von Nachrichten mit Azure Event Hubs verwendet werden. Weitere Informationen finden Sie unter Verwenden von Azure Event Hubs aus Apache Kafka-Anwendungen
In diesem Lernprogramm enthalten wir zwei Authentifizierungsmethoden: Microsoft Entra-Authentifizierung und SAS-Authentifizierung (Shared Access Signatures). Auf der Registerkarte "Kennwortlos" werden die Microsoft Entra-Authentifizierung und die Registerkarte Verbinden ion-Zeichenfolgen die SAS-Authentifizierung angezeigt.
Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Event Hubs für Kafka mithilfe von In Microsoft Entra ID definierten Identitäten. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.
Die SAS-Authentifizierung verwendet den Verbindungszeichenfolge Ihres Azure Event Hubs-Namespaces für den delegierten Zugriff auf Event Hubs für Kafka. Wenn Sie sich dafür entscheiden, Signaturen für den freigegebenen Zugriff als Anmeldeinformationen zu verwenden, müssen Sie die Verbindungszeichenfolge selbst verwalten.
Voraussetzungen
Azure-Abonnement (kostenloses Abonnement erstellen)
Java Development Kit (JDK) Version 8 oder höher.
Apache Maven, Version 3.2 oder höher.
cURL oder ein ähnliches HTTP-Hilfsprogramm zum Testen der Funktionalität.
Azure Cloud Shell oder Azure CLI 2.37.0 oder höher.
Ein Azure Event Hub. Wenn Sie keinen haben, erstellen Sie einen Event Hub mit Azure-Portal.
Ein Spring Boot-Anwendung. Wenn Sie keine Spring Boot-Anwendung besitzen, erstellen Sie mit Spring Initializr ein Maven-Projekt. Wählen Sie "Maven Project" aus, und fügen Sie unter "Abhängigkeiten" die Abhängigkeiten "Spring Web", "Spring for Apache Kafka" und "Cloud Stream" hinzu, und wählen Sie dann Java Version 8 oder höher aus.
Wichtig
Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Lernprogramm auszuführen.
Vorbereiten von Anmeldeinformationen
Azure Event Hubs unterstützt die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen an Event Hubs-Ressourcen. Mit Microsoft Entra-ID können Sie die rollenbasierte Zugriffssteuerung (Azure RBAC) von Azure verwenden, um Berechtigungen für einen Sicherheitsprinzipal zu erteilen, bei dem es sich um einen Benutzer oder einen Anwendungsdienstprinzipal handeln kann.
Wenn Sie dieses Beispiel lokal mit der Microsoft Entra-Authentifizierung ausführen möchten, stellen Sie sicher, dass Sich Ihr Benutzerkonto über das Azure Toolkit für IntelliJ, das Visual Studio Code Azure-Konto-Plug-In oder die Azure CLI authentifiziert hat. Stellen Sie außerdem sicher, dass dem Konto ausreichende Berechtigungen erteilt wurden.
Hinweis
Wenn Sie kennwortlose Verbindungen verwenden, müssen Sie Ihrem Konto Zugriff auf Ressourcen gewähren. Weisen Sie in Azure Event Hubs dem Microsoft Entra-Konto, das Sie derzeit verwenden, die Rolle und Azure Event Hubs Data Sender
die Azure Event Hubs Data Receiver
Rolle zu. Weitere Informationen zum Gewähren von Zugriffsrollen finden Sie unter Zuweisen von Azure-Rollen mithilfe der Azure-Portal und Autorisieren des Zugriffs auf Event Hubs-Ressourcen mithilfe der Microsoft Entra-ID.
Senden und Empfangen von Nachrichten von Azure Event Hubs
Mit einem Azure Event Hub können Sie Nachrichten mithilfe von Spring Cloud Azure senden und empfangen.
Um das Spring Cloud Azure Starter-Modul zu installieren, fügen Sie Ihrer pom.xml Datei die folgenden Abhängigkeiten hinzu:
Die Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.11.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Hinweis
Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependencies
Version auf4.17.0
. Diese Stückliste (Bill of Material, BOM) sollte im<dependencyManagement>
Abschnitt Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud Azure-Abhängigkeiten dieselbe Version verwenden. Weitere Informationen zu der version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.Das Spring Cloud Azure Starter-Artefakt:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Codieren der Anwendung
Führen Sie die folgenden Schritte aus, um Ihre Anwendung so zu konfigurieren, dass Nachrichten mithilfe von Azure Event Hubs erstellt und genutzt werden.
Konfigurieren Sie die Event Hub-Anmeldeinformationen, indem Sie der Datei "application.properties" die folgenden Eigenschaften hinzufügen.
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}
Tipp
Wenn Sie Version
spring-cloud-azure-dependencies:4.3.0
verwenden, sollten Sie die Eigenschaftspring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
mit dem Wertcom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
hinzufügen.Da
4.4.0
diese Eigenschaft automatisch hinzugefügt wird, müssen Sie sie nicht manuell hinzufügen.In der folgenden Tabelle werden die Felder in der Konfiguration beschrieben:
Feld Beschreibung spring.cloud.stream.kafka.binder.brokers
Gibt den Azure Event Hubs-Endpunkt an. spring.cloud.stream.bindings.consume-in-0.destination
Gibt den Eingabezielereignishub an, der für dieses Lernprogramm der zuvor erstellte Hub ist. spring.cloud.stream.bindings.consume-in-0.group
Gibt eine Consumergruppe aus Azure Event Hubs an, auf die Sie festlegen $Default
können, um die einfache Consumergruppe zu verwenden, die beim Erstellen Ihrer Azure Event Hubs-Instanz erstellt wurde.spring.cloud.stream.bindings.supply-out-0.destination
Gibt den Ausgabezielereignishub an, der für dieses Lernprogramm mit dem Eingabeziel identisch ist. Hinweis
Wenn Sie die automatische Themenerstellung aktivieren, müssen Sie das Konfigurationselement
spring.cloud.stream.kafka.binder.replicationFactor
hinzufügen, wobei der Wert auf mindestens 1 festgelegt ist. Weitere Informationen finden Sie im Referenzhandbuch zum Spring Cloud Stream Kafka Binder.Bearbeiten Sie die Startklassendatei, um den folgenden Inhalt anzuzeigen.
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); } }
Tipp
In diesem Lernprogramm gibt es keine Authentifizierungsvorgänge in den Konfigurationen oder im Code. Für die Verbindung mit Azure-Diensten ist jedoch eine Authentifizierung erforderlich. Um die Authentifizierung abzuschließen, müssen Sie Azure Identity verwenden. Spring Cloud Azure verwendet
DefaultAzureCredential
, die von der Azure Identity-Bibliothek bereitgestellt wird, um Anmeldeinformationen ohne Codeänderungen zu erhalten.„
DefaultAzureCredential
“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Mit diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (z. B. in lokalen und Produktionsumgebungen) verwenden, ohne umgebungsspezifischen Code zu implementieren. Weitere Informationen finden Sie unter DefaultAzureCredential.Um die Authentifizierung in lokalen Entwicklungsumgebungen abzuschließen, können Sie Azure CLI, Visual Studio Code, PowerShell oder andere Methoden verwenden. Weitere Informationen finden Sie unter Azure-Authentifizierung in Java-Entwicklungsumgebungen. Um die Authentifizierung in Azure-Hostingumgebungen abzuschließen, empfehlen wir die Verwendung der vom Benutzer zugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.
Starten Sie die Anwendung. Nachrichten wie das folgende Beispiel werden in Ihrem Anwendungsprotokoll gepostet:
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Bereitstellen in Azure Spring Apps
Nachdem Sie nun die Spring Boot-Anwendung lokal ausgeführt haben, ist es an der Zeit, sie in die Produktion zu verschieben. Azure Spring Apps erleichtert die Bereitstellung von Spring Boot-Anwendungen in Azure ohne Codeänderungen. Der Dienst verwaltet die Infrastruktur von Spring-Anwendungen und ermöglicht es Entwicklern dadurch, sich auf ihren Code zu konzentrieren. Azure Spring Apps bietet eine Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, Blau/Grün-Bereitstellungen und mehr. Informationen zum Bereitstellen Ihrer Anwendung in Azure Spring Apps finden Sie unter Bereitstellen Ihrer ersten Anwendung in Azure Spring Apps.
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für