Freigeben über


Kafka Streams für Azure Event Hubs

Dieser Artikel enthält ausführliche Informationen zur Verwendung der Kafka Streams-Clientbibliothek mit Azure Event Hubs.

Hinweis

Die Kafka Streams-Funktionalität ist nur in Public Preview für die Event Hubs-Tarife Premium und Dedicated verfügbar.

Übersicht

Apache Kafka Streams ist eine Clientbibliothek nur für Java, die ein Framework für die Verarbeitung von Streamingdaten und das Erstellen von Echtzeitanwendungen für die in Kafka-Themen gespeicherten Daten bereitstellt. Die gesamte Verarbeitung ist auf den Client festgelegt, während Kafka-Themen als Datenspeicher für Zwischendaten fungieren, bevor die Ausgabe in das Zielthema geschrieben wird.

Event Hubs stellt einen Kafka-Endpunkt bereit, der mit Ihren vorhandenen Kafka-Clientanwendungen als Alternative zum Betreiben eines eigenen Kafka-Clusters verwendet werden kann. Event Hubs funktioniert mit vielen Ihrer vorhandenen Kafka-Anwendungen. Weitere Informationen finden Sie unter Event Hubs für Apache Kafka.

Verwenden von Kafka Streams mit Azure Event Hubs

Azure Event Hubs unterstützt nativ sowohl das AMQP- als auch das Kafka-Protokoll. Um jedoch ein kompatibles Kafka Streams-Verhalten sicherzustellen, müssen einige der Standardkonfigurationsparameter für Kafka-Clients aktualisiert werden.

Eigenschaft Standardverhalten für Event Hubs Geändertes Verhalten für Kafka Streams Erklärung
messageTimestampType Auf AppendTime festlegen Sollte auf CreateTime festgelegt werden Kafka Streams basiert auf dem Erstellungszeitstempel und nicht auf dem Anfügezeitstempel.
message.timestamp.difference.max.ms Der maximal zulässige Wert beträgt 90 Tage. Die Eigenschaft wird nur verwendet, um vergangene Zeitstempel zu verwalten. Die zukünftige Zeit ist auf 1 Stunde festgelegt und kann nicht geändert werden. Es steht im Einklang mit der Kafka-Protokollspezifikation
min.compaction.lag.ms Der maximal zulässige Wert ist zwei Tage.
Themen zur unbegrenzten Datenaufbewahrung größenbasiertes Abschneiden von 250 GB für jede Themenpartition
Löschen der Datensatz-API für unendliche Aufbewahrungsthemen Nicht implementiert. Als Problemumgehung kann das Thema aktualisiert werden und eine begrenzte Aufbewahrungszeit festgelegt werden. Diese Funktionalität wird in GA unterstützt.

Weitere Überlegungen

Im Folgenden finden Sie einige der anderen Überlegungen, die Sie berücksichtigen sollten.

  • Kafka Streams-Clientanwendungen benötigen Verwaltungs- Lese- und Schreibberechtigungen für alle Namespaces, damit temporäre Themen für die Datenstromverarbeitung erstellt werden können.
  • Temporäre Themen und Partitionen zählen zum Kontingent für den angegebenen Namespace. Sie sollten beim Bereitstellen des Namespaces oder Clusters berücksichtigt werden.
  • Unbegrenzte Aufbewahrungszeit für den „Offset“-Speicher ist durch die maximale Aufbewahrungszeit der SKU (Stock Keeping Unit) begrenzt. Überprüfen Sie Event Hubs-Kontingente für diese stufenspezifischen Werte.

Dazu gehört das Aktualisieren der Themenkonfiguration in der messageTimestampType , um die CreateTime (d. h. die Ereigniserstellungszeit) anstelle der AppendTime (d. h. die Protokollanfügezeit) zu verwenden.

Um das Standardverhalten (erforderlich) außer Kraft zu setzen, muss die folgende Einstellung in Azure Resource Manager (ARM) festgelegt werden.

Hinweis

Nur die spezifischen Teile der ARM-Vorlage werden angezeigt, um die Konfiguration hervorzuheben, die aktualisiert werden muss.

{
  "parameters": {
    "namespaceName": "contoso-test-namespace",
    "resourceGroupName": "contoso-resource-group",
    "eventHubName": "contoso-event-hub-kafka-streams-test",
    ...
    "parameters": {
      "properties": {
        ...
        "messageTimestampType": "CreateTime",
        "retentionDescription": {
          "cleanupPolicy": "Delete",
          "retentionTimeInHours": -1,
          "tombstoneRetentionTimeInHours": 1
        }
      }
    }
  }
}

Kafka Streams-Konzepte

Kafka-Streams bieten eine einfache Abstraktionsschicht über die Kafka-Producer- und Consumer-APIs, um Entwicklern den schnelleren Einstieg in Echtzeit-Streamingszenarien zu erleichtern. Die kompakte Bibliothek hängt von einem kompatiblen Apache Kafka-Broker (z. B. Azure Event Hubs) für die interne Messaging-Ebene ab und verwaltet einen fehlertoleranten lokalen Zustandsspeicher. Mit der Transaktions-API unterstützt die Kafka Streams-Bibliothek umfangreiche Verarbeitungsfeatures wie z. B. die genaue einmalige Verarbeitung und die Verarbeitung von je einem Datensatz.

Datensätze, die nicht in der richtigen Reihenfolge eintreffen, profitieren von ereigniszeitbasierten Windowing-Vorgängen.

Hinweis

Es wird empfohlen, dass Sie sich mit der Kafka Streams-Dokumentation und den Kernkonzepten von Kafka Streams vertraut machen.

Bäche

Ein Datenstrom ist die abstrahierte Darstellung eines Kafka-Themas. Er besteht aus einem ungebundenen Dataset, das kontinuierlich aktualisiert wird und unveränderliche Datensätze enthält, wobei jeder Datensatz ein Schlüssel-Wert-Paar ist.

Topologie der Stream-Verarbeitung

Eine Kafka Streams-Anwendung definiert die Berechnungslogik über ein DAG (gerichtetes azyklisches Diagramm), das durch eine Prozessortopologie dargestellt wird. Die Prozessortopologie besteht aus Datenstromprozessoren (Knoten in der Topologie), die einen Verarbeitungsschritt darstellen, verbunden durch Datenströme (Kanten in der Topologie).

Streamprozessoren können mit Upstream- oder Downstreamprozessoren verkettet werden, mit Ausnahme bestimmter Sonderfälle:

  • Quellprozessoren – Diese Prozessoren verfügen nicht über Upstreamprozessoren und lesen direkt aus einem oder mehreren Datenströmen. Sie können anschließend an nachgeschaltete Prozessoren angekettet werden.
  • Senkenprozessoren: Diese Prozessoren verfügen nicht über Downstreamprozessoren und müssen direkt in einen Datenstrom schreiben.

Die Datenstromverarbeitungstopologie kann entweder mit dem Kafka Streams-DSL oder mit der Prozessor-API auf niedrigerer Ebene definiert werden.

Datenstrom- und Tabellen-Dualität

Datenströme und Tabellen sind zwei unterschiedliche aber nützliche Abstraktionen, die vom Kafka Streams-DSL bereitgestellt werden und sowohl Zeitreihen- als auch rationale Datenformate modellieren, die für Anwendungsfälle der Datenverarbeitung koexistieren müssen.

Kafka erweitert es weiter und führt eine Dualität zwischen Streams und Tabellen ein, wobei ein

  • Ein Datenstrom kann als Änderungsprotokoll einer Tabelle betrachtet werden, und
  • Eine Tabelle kann als Momentaufnahme des neuesten Werts jedes Schlüssels in einem Datenstrom betrachtet werden.

Mit dieser Dualität können Tabellen und Datenströme im Austausch verwendet werden, wie dies für den Anwendungsfall erforderlich ist.

Beispiel:

  • Verknüpfen statischer Kundendaten (modelliert als Tabelle) mit dynamischen Transaktionen (modelliert als Datenstrom) und
  • Verknüpfen wechselnder Portfoliopositionen im Portfolio eines Tageshändlers (modelliert als Datenstrom) mit dem neuesten Marktdaten-Feed (als Datenstrom modelliert).

Zeit

Kafka Streams ermöglicht Windowing- und Karenzfunktionen, sodass Datensätze außerhalb der Reihenfolge erfasst und dennoch in die Verarbeitung einbezogen werden können. Um sicherzustellen, dass dieses Verhalten deterministisch ist, gibt es in Kafka-Streams weitere Zeitbegriffe. Dazu gehören:

  • Erstellungszeit (auch als "Ereigniszeit" bezeichnet) - Dies ist der Zeitpunkt, zu dem das Ereignis aufgetreten ist und der Datensatz erstellt wurde.
  • Verarbeitungszeit: Dies ist der Zeitpunkt, zu dem der Datensatz von der Streamverarbeitungsanwendung verarbeitet wird (oder zu dem er verbraucht wird).
  • Anfügezeit (auch als "Erstellungszeit" bezeichnet): Dies ist der Zeitpunkt, zu dem die Daten gespeichert und in den Speicher des Kafka-Brokers übernommen werden. Sie unterscheidet sich von der Erstellungszeit durch den Zeitunterschied zwischen der Erstellung des Ereignisses und der tatsächlichen Aufnahme durch den Broker.

Zustandsbehaftete Vorgänge

Die Zustandsverwaltung ermöglicht anspruchsvolle Datenstromverarbeitungsanwendungen wie das Verknüpfen und Aggregieren von Daten aus verschiedenen Datenströmen. Dies wird mit Zustandsspeichern erreicht, die von Kafka Streams bereitgestellt werden und auf die über zustandsbehaftete Operatoren im Kafka Streams-DSL zugegriffen werden kann.

Zustandsbehaftete Transformationen im DSL umfassen:

Zeitfenster und Kulanzzeit

Windowing-Vorgänge im Kafka Streams-DSL ermöglichen Entwicklern, zu steuern, wie Datensätze für einen bestimmten Schlüssel für zustandsbehaftete Vorgänge wie Aggregationen und Verknüpfungen gruppiert werden.

Windowing-Vorgänge ermöglichen auch die Angabe einer Karenzzeit, um einige Flexibilität für Datensätze für ein bestimmtes Fenster zu bieten, die nicht in der richtigen Reihenfolge eintreffen. Ein Datensatz, der für ein bestimmtes Fenster vorgesehen ist und nach dem angegebenen Fenster eingeht, aber noch innerhalb der Karenzzeit, wird akzeptiert. Datensätze, die nach Ablauf der Karenzzeit ankommen, werden verworfen.

Anwendungen müssen die Steuerelemente für Windowing und Karenzzeit verwenden, um die Fehlertoleranz für Datensätze zu verbessern, die nicht in der richtigen Reihenfolge eintreffen. Die entsprechenden Werte variieren je nach Arbeitsauslastung und müssen empirisch identifiziert werden.

Verarbeitungsgarantien

Geschäftliche und technische Benutzer versuchen, wichtige Geschäftsinformationen aus der Ausgabe von Streamverarbeitungsworkloads zu extrahieren, die zu hohen Anforderungen an die Transaktionsgarantie führt. Kafka-Streams arbeiten mit Kafka-Transaktionen zusammen, um die Transaktionsverarbeitung zu gewährleisten, indem sie in das zugrunde liegende Speichersystem der Kafka-kompatiblen Broker (z. B. Azure Event Hubs) integriert werden, um sicherzustellen, dass Offsetcommits und Zustandsspeicheraktualisierungen atomar geschrieben werden.

Um Transaktionsverarbeitungsgarantien sicherzustellen, muss die processing.guarantee-Einstellung in den Kafka Streams-Konfigurationen vom Standardwert at_least_once auf exactly_once_v2 (für Clientversionen von Apache Kafka 2.5 oder höher) oder exactly_once (für Clientversionen vor Apache Kafka 2.5.x) aktualisiert werden.

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.