Kafka Streams für Azure Event Hubs

Dieser Artikel enthält Details dazu, wie Sie die Kafka Streams-Clientbibliothek mit Azure Event Hubs verwenden.

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 verwendet, um nur vergangene Zeitstempel zu steuern. Die zukünftige Zeit ist auf 1 Stunde festgelegt und kann nicht geändert werden. Dies entspricht der Kafka-Protokollspezifikation.
min.compaction.lag.ms Der maximal zulässige Wert ist zwei Tage.
Unbegrenzte Aufbewahrungsthemen Größenbasiertes Abschneiden von 250 GB für jede Themenpartition
Datensatz-API für unendliche Aufbewahrungsthemen löschen Nicht implementiert. Als Problemumgehung kann das Thema aktualisiert werden und eine begrenzte Aufbewahrungszeit festgelegt werden. Dies geschieht in GA.

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. Diese sollten bei der Bereitstellung des Namespaces oder Clusters berücksichtigt werden.
  • Unendliche Aufbewahrungszeit für den „Offset“-Speicher ist durch die maximale Aufbewahrungszeit der Nachrichten der SKU begrenzt. Überprüfen Sie Event Hubs-Kontingente für diese stufenspezifischen Werte.

Dazu gehört, dass die Themenkonfiguration in messageTimestampType so aktualisiert wird, dass die CreateTime (also die Ereigniserstellungszeit) anstelle der AppendTime (die Protokollanfügezeit) verwendet wird.

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 bietet eine einfache Abstraktionsebene über den Kafka-Producer- und Consumer-APIs, damit Entwickler schneller mit Echtzeitstreamingszenarios beginnen können. 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 Exactly-One-Verarbeitung und die Verarbeitung mit einem Datensatz nach dem anderen.

Datensätze außerhalb der Reihenfolge 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.

Streams

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.

Stream-Verarbeitungstopologie

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

Datenstromprozessoren können mit Upstreamprozessoren oder nachgelagerten Prozessoren 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 dann an nachgeschaltete Prozessoren verkettet werden.
  • Senkenprozessoren: Diese Prozessoren verfügen nicht über nachgeschaltete Prozessoren 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 Tabellendualitä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 führt zusätzlich eine Dualität zwischen Datenströmen udn Tabellen ein.

  • Dabei kann ein Datenstrom als Änderungsprotokoll einer Tabelle und
  • eine Tabelle 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änders (modelliert als Datenstrom) mit dem neuesten Marktdatenfeed (als Datenstrom modelliert).

Zeit

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

  • Erstellungszeit (auch als „Ereigniszeit“ bezeichnet): Dies ist die Zeit, zu der das Ereignis aufgetreten ist und der Datensatz erstellt wurde.
  • Verarbeitungszeit: Dies ist die Zeit, zu der der Datensatz von der Datenstromverarbeitungsanwendung verarbeitet wird (oder wenn er verbraucht wird).
  • Anfügezeit (auch als „Erstellungszeit“ bezeichnet): Dies ist die Zeit, zu der die Daten gespeichert und an den Speicher des Kafka-Brokers gebunden sind. Dies unterscheidet sich von der Erstellungszeit aufgrund des Zeitunterschieds zwischen der Erstellung des Ereignisses und der tatsächlichen Erfassung 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 über zustandsbehaftete Betreiber im Kafka Streams-DSL zugegriffen wird.

Zustandsbehaftete Transformationen im DSL umfassen:

Windowing und Karaenzzeit

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 (Grace), um einige Flexibilität für Out-of-Order-Datensätze für ein bestimmtes Fenster zu bieten. Ein Datensatz, der für ein bestimmtes Fenster vorgesehen ist und nach dem angegebenen Fenster aber noch innerhalb der Karenzzeit eingeht, wird akzeptiert. Datensätze, die nach Ablauf der Karenzzeit ankommen, werden verworfen.

Anwendungen müssen die Windowing- und Karenzzeitsteuerelemente verwenden, um die Fehlertoleranz für Datensätze außerhalb der Reihenfolge zu verbessern. Die entsprechenden Werte variieren je nach Arbeitsauslastung und müssen empirisch identifiziert werden.

Verarbeitungsgarantien

Geschäfts- und technische Benutzer versuchen, wichtige Geschäftserkenntnisse aus der Ausgabe von Datenstromverarbeitungsworkloads zu extrahieren, die zu hohen Transaktionsgarantieanforderungen führen. Kafka Streams arbeitet mit Kafka-Transaktionen zusammen, um Transaktionsverarbeitungsgarantien sicherzustellen, indem eine Integration mit dem zugrunde liegende Speichersystem des Kafka-Brokers (z. B. Azure Event Hubs) durchgeführt wird, um sicherzustellen, dass Offset-Commits und Zustandsspeicheraktualisierungen atomisch 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.