Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie Azure Event Hubs verwenden können, um Daten aus Apache Kafka-Anwendungen zu streamen, ohne selbst einen Kafka-Cluster einzurichten.
Überblick
Azure Event Hubs stellt einen Apache Kafka-Endpunkt auf einem Event Hub bereit, mit dem Benutzer mithilfe des Kafka-Protokolls eine Verbindung mit dem Event Hub herstellen können. Sie können den Kafka-Endpunkt eines Event-Hubs oft ohne Codeänderungen aus Ihren Anwendungen heraus nutzen. Sie ändern nur die Konfiguration, d. h. Sie aktualisieren die Verbindungszeichenfolge in den Konfigurationen, um auf den Kafka-Endpunkt zu verweisen, der von Ihrem Event Hub verfügbar gemacht wird, anstatt auf Ihren Kafka-Cluster zu verweisen. Dann können Sie damit beginnen, Ereignisse aus Ihren Anwendungen, die das Kafka-Protokoll verwenden, in Event-Hubs zu streamen, die Kafka-Themen entsprechen.
Weitere Informationen zum Migrieren Ihrer Apache Kafka-Anwendungen zu Azure Event Hubs finden Sie im Migrationsleitfaden.
Hinweis
- Dieses Feature wird nur in den **Standard-, Premium- und dedizierten Stufen unterstützt.
- Event Hubs für Apache Kafka Ecosystems unterstützen Apache Kafka Version 1.0 und höher.
Konzeptionelle Zuordnung zwischen Apache Kafka und Azure Event Hubs
Vom Konzept her sind sich Apache Kafka und Event Hubs sehr ähnlich. Beide sind partitionierte Protokolle, die für das Streamen von Daten erstellt wurden, wobei der Client steuert, welcher Teil des beibehaltenen Protokolls gelesen werden soll. In der folgenden Tabelle werden die Konzepte von Apache Kafka und Event Hubs einander zugeordnet.
| Apache Kafka-Konzept | Event Hubs-Konzept |
|---|---|
| Cluster | Namespace |
| Thema | Einen Event Hub |
| Partition | Partition |
| Consumergruppe | Consumergruppe |
| Abweichung | Abweichung |
Apache Kafka-Features, die auf Azure Event Hubs unterstützt werden
Kafka Streams
Kafka Streams ist eine Clientbibliothek für Stream Analytics, die Teil des Apache Kafka-Open-Source-Projekts, aber vom Apache Kafka-Ereignisbroker getrennt ist.
Hinweis
Kafka Streams befindet sich derzeit in der öffentlichen Vorschau auf der Premium- und dedizierten Stufe.
Azure Event Hubs unterstützt die Kafka Streams-Clientbibliothek mit Details und Konzepten, die hier zur Verfügung stehen.
Der häufigste Grund, warum Azure Event Hubs-Kunden die Unterstützung von Kafka Streams haben möchten, besteht darin, dass sie am Produkt „ksqlDB“ von Confluent interessiert sind. „ksqlDB“ ist ein proprietäres freigegebene-Quelle-Projekt (Shared-Source-Projekt), das so lizenziert ist, dass kein Anbieter, der „Software-als-Dienst (Software-as-a-Service)“, „Plattform-als-Dienst (Platform-as-a-Service)“, „Infrastruktur-als-Dienst (Infrastructure-as-a-Service)“ oder andere ähnliche Onlinedienste anbietet, die mit Confluent-Produkten oder -Diensten konkurrieren“, „ksqlDB“-Unterstützung verwenden oder anbieten darf. In der Praxis müssen Sie, wenn Sie ksqlDB verwenden, entweder Kafka selbst ausführen, oder Sie müssen die Cloudangebote von Confluent nutzen. Die Lizenzierungsbedingungen können sich auch auf Azure-Kunden auswirken, die Dienste für einen Zweck anbieten, der von der Lizenz ausgeschlossen wird.
Als eigenständige Lösung und ohne ksqlDB verfügt Kafka Streams über weniger Funktionen als viele alternative Frameworks und Dienste, von denen die meisten über integrierte SQL-Streamingschnittstellen verfügen. Sie alle sind heute in Azure Event Hubs integriert:
- Azure Stream Analytics
- Azure Synapse Analytics (über Event Hubs Capture)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Apache Flink in HDInsight in Azure Kubernetes Service
- Akka Streams
Kafka Transaktionen
Hinweis
Kafka Transactions befindet sich derzeit in der öffentlichen Vorschau auf der Premium- und Dedizierten Ebene.
Azure Event Hubs unterstützt Kafka-Transaktionen. Weitere Details zu Support und Konzepten finden Sie unter Apache Kafka Transaktionen.
Komprimierung
Hinweis
Kafka-Komprimierung für Event Hubs wird derzeit nur in Premium- und Dedizierten Ebenen unterstützt.
Das clientseitige Komprimierungsfeature in Apache Kafka-Clients spart Computeressourcen und Bandbreite, indem eine Reihe von mehreren Nachrichten in eine einzelne Nachricht auf der Produzentenseite komprimiert und der Batch auf der Verbraucherseite dekomprimiert wird. Der Apache Kafka-Broker behandelt den Batch als spezielle Nachricht.
Entwickler von Kafka-Produzenten können die Nachrichtenkomprimierung aktivieren, indem Sie die compression.type Eigenschaft festlegen. Azure Event Hubs unterstützt derzeit die gzip-Komprimierung.
Compression.type = none | gzip
Während das Feature nur für Apache Kafka-Produzentendatenverkehr und Verbraucherdatenverkehr unterstützt wird, kann DER AMQP-Consumer komprimierten Kafka-Datenverkehr als dekomprimierte Nachrichten nutzen.
Hauptunterschiede zwischen Apache Kafka und Azure Event Hubs
Während es sich bei Apache Kafka um Software handelt, die Sie in der Regel installieren und betreiben müssen, ist Event Hubs ein vollständig verwalteter, cloudbasierter Dienst. Es gibt keine Server, Datenträger oder Netzwerke, die verwaltet und überwacht werden müssen, und keine Broker, die berücksichtigt oder konfiguriert werden müssen. Sie erstellen einen Namespace, d. h. einen Endpunkt mit einem vollqualifizierten Domänennamen, und erstellen dann Event Hubs (Themen) in diesem Namespace.
Weitere Informationen zur Verwendung von Event Hubs und Namespaces finden Sie unter Event Hubs-Features. Als Clouddienst verwendet Event Hubs eine einzelne stabile virtuelle IP-Adresse als Endpunkt, damit Clients keine Informationen über die Broker oder die Computer in einem Cluster benötigen. Auch wenn Event-Hubs dasselbe Protokoll implementiert, bedeutet dieser Unterschied, dass der gesamte Kafka-Datenverkehr für alle Partitionen vorhersehbar durch diesen einen Endpunkt weitergeleitet wird, anstatt Firewallzugriff für alle Broker eines Clusters zu erfordern.
Die Skalierung in Event Hubs wird durch die Anzahl von Durchsatzeinheiten (TUs) oder Verarbeitungseinheiten gesteuert, die Sie erwerben. Wenn Sie die Funktion Automatische Vergrößerung für einen Namespace im Standard-Tarif aktivieren, skaliert Event Hubs TUs automatisch hoch, wenn Sie das Durchsatzlimit erreichen. Dieses Feature funktioniert auch mit dem Apache Kafka-Protokollsupport. Für einen Namespace im Premium-Tarif können Sie die Anzahl der Verarbeitungseinheiten erhöhen, die dem Namespace zugewiesen sind.
Ist Apache Kafka die richtige Lösung für Ihre Workload?
Wenn Sie aus einem Hintergrund der Erstellung von Anwendungen stammen, die Apache Kafka verwenden, ist es auch hilfreich zu verstehen, dass Azure Event Hubs Teil einer Flotte von Diensten ist, die auch Azure Service Bus und Azure Event Grid umfasst.
Während einige Anbieter kommerzieller Distributionen von Apache Kafka angeben, dass Apache Kafka eine All-in-One-Lösung für alle Ihre Messaging-Plattform-Anforderungen ist, ist es in Wirklichkeit so, dass Apache Kafka beispielsweise das Warteschlangen-Muster competing-consumer nicht implementiert. Es unterstützt kein Publish-Subscribe-Modell auf einer Ebene, die es Abonnenten ermöglicht, auf eingehende Nachrichten basierend auf anderen vom Server ausgewerteten Regeln als einfachen Offsets zuzugreifen. Es bietet keine Funktionalitäten, um den Lebenszyklus eines durch eine Nachricht initiierten Auftrags zu verfolgen oder fehlerhafte Nachrichten in einer Warteschlange für unzustellbare Nachrichten abzulegen. All diese Features sind für viele Unternehmensnachrichtenszenarien von grundlegender Grundlage.
Um die Unterschieden zwischen Mustern und dem Muster, das von welchem Dienst am besten abgedeckt wird, zu verstehen lesen Sie die Anleitung asynchrone Messagingoptionen in Azure. Als Apache Kafka-Benutzer können Sie feststellen, dass Kommunikationspfade, die Sie mit Kafka realisiert haben, mit weit weniger grundlegender Komplexität und noch leistungsstärkeren Funktionen mithilfe von Event Grid oder Service Bus realisiert werden können.
Wenn Sie bestimmte Funktionen von Apache Kafka benötigen, die nicht über die Event Hubs für Apache Kafka-Schnittstelle verfügbar sind, oder wenn Ihr Implementierungsmuster die Event Hubs-Kontingente überschreitet, können Sie auch einen nativen Apache Kafka-Cluster in Azure HDInsight ausführen.
Sicherheit und Authentifizierung
Jedes Mal, wenn Sie Ereignisse von einem Event Hubs für Kafka veröffentlichen oder nutzen, versucht Ihr Client, auf die Event Hubs-Ressourcen zuzugreifen. Sie möchten sicherstellen, dass der Zugriff auf die Ressourcen durch eine autorisierte Entität erfolgt. Wenn Sie das Apache Kafka-Protokoll mit Ihren Clients verwenden, legen Sie Ihre Konfiguration für die Authentifizierung und Verschlüsselung mithilfe der SASL-Mechanismen fest. Bei Verwendung von Event Hubs für Kafka ist TLS-Verschlüsselung erforderlich (da alle Daten während der Übertragung mit Event Hubs TLS verschlüsselt sind). Sie können die option SASL_SSL in Ihrer Konfigurationsdatei angeben.
Azure Event Hubs bietet mehrere Optionen, um den Zugriff auf Ihre sicheren Ressourcen zu autorisieren:
- OAuth 2.0
- Shared Access Signature (SAS)
OAuth 2.0
Event Hubs sind in Microsoft Entra ID integriert, die einen OAuth 2.0-kompatiblen zentralisierten Autorisierungsserver bereitstellt. Mithilfe der Microsoft Entra-ID können Sie azure role-based access control (Azure RBAC) verwenden, um Ihren Clientidentitäten fein abgestimmte Berechtigungen zu erteilen. Verwenden Sie dieses Feature mit Ihren Kafka-Clients, indem Sie SASL_SSL für das Protokoll und OAUTHBEARER für den Mechanismus angeben. Details zu den Azure-Rollen und -Ebenen, die den Umfang des Zugriffs definieren, finden Sie unter Autorisieren des Zugriffs mit Microsoft Entra ID.
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler
Hinweis
Diese Konfigurationseigenschaften gelten für die Programmiersprache Java. Beispiele, die die Verwendung von OAuth mit Event Hubs für Kafka in verschiedenen Programmiersprachen veranschaulichen, finden Sie unter den Beispielen auf GitHub.
Signatur für gemeinsam genutzten Zugriff (Shared Access Signature, SAS)
Event Hubs bietet außerdem SAS (Shared Access Signatures) für delegierten Zugriff auf Event Hubs für Kafka-Ressourcen. Die Autorisierung des Zugriffs mithilfe des tokenbasierten OAuth 2.0-Mechanismus bietet eine bessere Sicherheit und Benutzerfreundlichkeit gegenüber SAS. Die integrierten Rollen können auch die Notwendigkeit einer ACL-basierten Autorisierung beseitigen, die Sie pflegen und verwalten müssen. Sie können dieses Feature in Kombination mit Ihren Kafka-Clients verwenden, indem Sie SASL_SSL als Protokoll und PLAIN als Mechanismus angeben.
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
Wichtig
Ersetzen Sie {YOUR.EVENTHUBS.CONNECTION.STRING} durch die Verbindungszeichenfolge für Ihren Event Hubs-Namespace. Anweisungen zum Abrufen der Verbindungszeichenfolge finden Sie unter Abrufen einer Event Hubs-Verbindungszeichenfolge. Hier sehen Sie eine Beispielkonfiguration: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";
Hinweis
Wenn die SAS-Authentifizierung bei Kafka-Clients verwendet wird, werden die eingerichteten Verbindungen beim erneuten Generieren des SAS-Schlüssels nicht getrennt.
Hinweis
Generierte Token für gemeinsame Zugriffssignaturen werden nicht unterstützt, wenn Sie den Event Hubs für apache Kafka-Endpunkt verwenden.
Beispiele
Ein Tutorial mit schrittweisen Anleitungen zum Erstellen eines Event Hubs und den Zugriff darauf mithilfe von SAS oder OAuth finden Sie unter Schnellstart: Datenstreaming mit Event Hubs mithilfe des Kafka-Protokolls.
Andere Features von Azure Event Hubs
Die Funktion „Event Hubs für Apache Kafka“ ist eines der drei Protokolle, die gleichzeitig in Azure Event Hubs mit HTTP und AMQP verfügbar sind. Sie können mit jedem dieser Protokolle schreiben und mit einem der anderen lesen, sodass Ihre aktuellen Apache Kafka-Produzenten die Veröffentlichung über Apache Kafka fortsetzen können. Der Leser kann jedoch von der nativen Integration in die AMQP-Schnittstelle von Event Hubs profitieren, z. B. Azure Stream Analytics oder Azure Functions. Umgekehrt können Sie Azure Event Hubs problemlos als Zielendpunkt in AMQP-Routingnetze integrieren und dennoch Daten über Apache Kafka-Integrationen lesen.
Darüber hinaus arbeiten Event Hubs-Funktionen wie Capture, das eine äußerst kosteneffiziente Langzeitarchivierung über Azure Blob Storage und Azure Data Lake Storage ermöglichen, und Geographische Notfallwiederherstellung ebenfalls mit dem Event Hubs für Kafka-Funktion zusammen.
Idempotenz
Azure Event Hubs für Apache Kafka unterstützt sowohl idempotente Producer als auch idempotente Consumer.
Einer der wichtigsten Grundsätze von Azure Event Hubs ist das Konzept der mindestens einmaligen Zustellung. Dieser Ansatz stellt sicher, dass Ereignisse immer übermittelt werden. Es bedeutet auch, dass Verbraucher Ereignisse mehr als einmal empfangen können, auch immer wieder. Aus diesem Grund ist es wichtig, dass der Consumer das Muster idempotenter Consumer unterstützt.
Verwandte Inhalte
In diesem Artikel werden Event Hubs für Kafka vorgestellt. Weitere Informationen finden Sie unter Apache Kafka-Entwicklerleitfaden für Azure Event Hubs.
Ein Tutorial mit schrittweisen Anleitungen zum Erstellen eines Event Hubs und den Zugriff darauf mithilfe von SAS oder OAuth finden Sie unter Schnellstart: Datenstreaming mit Event Hubs mithilfe des Kafka-Protokolls.
Siehe auch die OAuth-Beispiele auf GitHub.