Worum handelt es sich bei Azure Event Hubs für Apache Kafka?

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.

Hinweis

Dieses Feature wird nur in den Tarifen Standard, Premium und Dedicated unterstützt.

Ü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.

Hinweis

Event Hubs für Kafka-Ökosysteme unterstützt Apache Kafka-Version 1.0 und höher.

Konzeptionelle Zuordnung zwischen Apache Kafka und Azure Event Hubs

Vom Konzept her sind sich 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 Kafka und Event Hubs einander zugeordnet.

Kafka-Konzept Event Hubs-Konzept
Cluster Namespace
Thema Einen Event Hub
Partition Partition
Consumergruppe Consumergruppe
Offset Offset

Hauptunterschiede zwischen 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?

Beim Entwickeln von Anwendungen mit Apache Kafka ist es auch hilfreich zu verstehen, dass Azure Event Hubs Teil einer Sammlung von Diensten ist, die auch Azure Service Bus und Azure Event Grid umfasst.

Während einige Anbieter kommerzieller Distributionen von Apache Kafka suggerieren, dass Apache Kafka ein One-Stop-Shop für alle Ihre Anforderungen an eine Messaging-Plattform ist, ist die Realität, dass Apache Kafka zum Beispiel nicht das competing-consumer queue pattern implementiert, keine Unterstützung für publish-subscribe auf einer Ebene bietet, die Abonnenten den Zugriff auf die eingehenden Nachrichten auf der Grundlage von vom Server ausgewerteten Regeln (mit Ausnahme von einfachen Offsets) ermöglicht, und keine Möglichkeiten bietet, den Lebenszyklus eines von einer Nachricht initiierten Auftrags zu verfolgen oder fehlerhafte Nachrichten in eine Warteschlange mit totem Buchstaben zu verschieben, was für viele Messaging-Szenarien in Unternehmen von grundlegender Bedeutung ist.

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 Benutzer oder Benutzerin von Apache Kafka werden Sie vielleicht feststellen, dass die Kommunikationspfade, die Sie bisher mit Kafka umgesetzt haben, mit weitaus geringerer Grundkomplexität und dennoch leistungsfähigeren Funktionen realisiert werden können, wenn Sie entweder Event Grid oder Service Bus verwenden.

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/Daten von einem Event Hub 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, können Sie die Konfiguration für Authentifizierung und Verschlüsselung mithilfe der SASL-Mechanismen festlegen. Wenn die Verwendung von Event Hubs für Kafka die TLS-Verschlüsselung erfordert (da alle Daten, die mit Event Hubs übertragen werden, TLS-verschlüsselt sind), kann dies durch Angabe der Option SASL_SSL in Ihrer Konfigurationsdatei erfolgen.

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. Mit Microsoft Entra ID können Sie rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) verwenden, um Ihren Clientidentitäten fein differenzierte Berechtigungen zu erteilen. Sie können diese Funktion mit Ihren Kafka-Clients nutzen, 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

Die oben aufgeführten 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.

Shared Access Signature (SAS)

Event Hubs bietet darüber hinaus Shared Access Signatures (SAS) für den delegierten Zugriff auf Event Hubs für Kafka-Ressourcen. Die Autorisierung des Zugriffs mithilfe des tokenbasierten OAuth 2.0-Mechanismus sorgt für überlegene Sicherheit und einfache Verwendung im Vergleich mit SAS. Durch die integrierten Rollen kann außerdem die Notwendigkeit einer ACL-basierten Autorisierung entfallen, die vom Benutzer gewartet und verwaltet werden muss. 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 SAS-Token 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 verfügbar sind und ergänzt HTTP und AMQP. 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 Disasterwiederherstellung 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. Dies bedeutet auch, dass Ereignisse mehrmals, sogar wiederholt, von Consumern wie einer Funktion empfangen werden können. Aus diesem Grund ist es wichtig, dass der Consumer das Muster idempotenter Consumer unterstützt.

Featureunterschiede zu Apache Kafka

Das Ziel von Event Hubs für Apache Kafka ist es, Anwendungen, die in die Apache Kafka-API eingebunden sind und ansonsten von einem Apache Kafka-Cluster unterstützt werden müssten, Zugriff auf die Funktionen von Azure Event Hubs zu ermöglichen.

Wie oben erläutert, bieten die Azure-Messagingdienste eine reichhaltige und robuste Abdeckung für eine Vielzahl von Messagingszenarien, und obwohl die folgenden Funktionen derzeit nicht durch Unterstützung von Event Hubs für die Apache Kafka-API unterstützt werden, zeigen wir, wo und wie die gewünschte Funktion verfügbar ist.

Transaktionen

Azure Service Bus verfügt über robuste Transaktionsunterstützung, die den Empfang und die Abwicklung von Nachrichten und Sitzungen ermöglicht, während ausgehende Nachrichten, die sich aus der Nachrichtenverarbeitung ergeben, unter dem Konsistenzschutz einer Transaktion an mehrere Zielentitäten gesendet werden. Der Funktionssatz ermöglicht nicht nur die genau einmalige Verarbeitung jeder Nachricht in einer Sequenz, sondern vermeidet auch das Risiko, dass ein anderer Consumer versehentlich die gleichen Nachrichten erneut verarbeitet, wie es bei Apache Kafka der Fall wäre. Service Bus ist der empfohlene Dienst für transaktionale Nachrichtenworkloads.

Komprimierung

Die clientseitige Komprimierungsfunktion von Apache Kafka komprimiert einen Batch von mehreren Nachrichten zu einer einzigen Nachricht auf der Producerseite und dekomprimiert den Batch auf der Consumerseite. Der Apache Kafka-Broker behandelt den Batch als spezielle Nachricht.

Entwickler von Kafka-Produzenten können die Nachrichtenkomprimierung aktivieren, indem Sie die Eigenschaft compression.type festlegen. In der öffentlichen Vorschau ist der einzige unterstützte Komprimierungsalgorithmus gzip.

Compression.type = none | gzip

Die Funktion wird derzeit nur für den Producer- und Consumer-Datenverkehr von Apache Kafka unterstützt. AMQP-Consumer können komprimierten Kafka-Datenverkehr als dekomprimierte Nachrichten nutzen. Die Nutzdaten eines Event Hubs-Ereignisses sind ein Bytestream, und der Inhalt kann mit einem Algorithmus Ihrer Wahl komprimiert werden, obwohl die einzige Option in der öffentlichen Vorschau gzip ist. Die Vorteile der Kafka-Komprimierung liegen in der geringeren Nachrichtengröße, der größeren Nutzlast, die Sie übertragen können, und dem geringeren Ressourcenverbrauch des Nachrichtenbrokers.

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.

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 „Sofware-als-Dienst (Software-as-a-Service)“, „Plattform-als-Dienst (Platform-as-a-Service)“, „Infrastuktur-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:

Die aufgeführten Dienste und Frameworks können im Allgemeinen Ereignisströme und Referenzdaten direkt aus einer Vielzahl von Quellen über Adapter erfassen. Kafka Streams kann nur Daten aus Apache Kafka erfassen, und Ihre Analyseprojekte sind daher an Apache Kafka gebunden. Wenn Sie Daten aus anderen Quellen verwenden möchten, müssen Sie diese Daten zuerst mit dem Kafka Connect-Framework in Apache Kafka importieren.

Wenn Sie das Kafka Streams-Framework in Azure verwenden möchten, stellt Apache Kafka in HDInsight diese Option bereit. Apache Kafka in HDInsight bietet die vollständige Kontrolle über alle Konfigurationsaspekte von Apache Kafka und ist gleichzeitig vollständig in verschiedene Aspekte der Azure-Plattform integriert, von der Platzierung von Fehler-/Updatedomänen über Netzwerkisolierung bis hin zu Überwachungsintegration.

Nächste Schritte

In diesem Artikel wurde eine Einführung in Event Hubs für Kafka vermittelt. 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.