Verwenden von Apache Flink mit Azure Event Hubs für Apache Kafka

Dieses Tutorial veranschaulicht, wie Sie Apache Flink mit einem Event Hub verbinden können, ohne Ihre Protokollclients ändern oder Ihre eigenen Cluster ausführen zu müssen. Weitere Informationen zur Event Hubs-Unterstützung für das Apache Kafka-Consumerprotokoll finden Sie unter Event Hubs für Apache Kafka.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen eines Event Hubs-Namespace
  • Klonen des Beispielprojekts
  • Ausführen des Flink-Producers
  • Ausführen des Flink-Consumers

Hinweis

Dieses Beispiel ist auf GitHub verfügbar.

Voraussetzungen

Stellen Sie vor dem Durchführen dieses Tutorials sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • Lesen Sie den Artikel Event Hubs für Apache Kafka.
  • Ein Azure-Abonnement. Wenn Sie keins besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Java Development Kit (JDK) 1.7+
    • Führen Sie unter Ubuntu apt-get install default-jdk aus, um das JDK zu installieren.
    • Achten Sie darauf, dass die Umgebungsvariable „JAVA_HOME“ auf den Ordner verweist, in dem das JDK installiert ist.
  • Führen Sie den Download und die Installation eines binären Maven-Archivs durch.
    • Unter Ubuntu können Sie apt-get install maven ausführen, um Maven zu installieren.
  • Git-Client
    • Unter Ubuntu können Sie sudo apt-get install git ausführen, um Git zu installieren.

Erstellen eines Event Hubs-Namespace

Ein Event Hubs-Namespace ist erforderlich, um Nachrichten an einen Event Hubs-Dienst zu senden oder von diesem zu empfangen. Anweisungen zum Erstellen eines Namespace und eines Event Hub finden Sie unter Erstellen eines Event Hubs. Kopieren Sie die Event Hubs-Verbindungszeichenfolge zur späteren Verwendung.

Klonen des Beispielprojekts

Nachdem Sie nun über die Event Hubs-Verbindungszeichenfolge verfügen, können Sie das Azure Event Hubs für Kafka-Repository klonen und zum Unterordner flink navigieren:

git clone https://github.com/Azure/azure-event-hubs-for-kafka.git
cd azure-event-hubs-for-kafka/tutorials/flink

Verwenden Sie das bereitgestellte Beispiel des Flink-Producers, und senden Sie Nachrichten an den Event Hubs-Dienst.

Bereitstellen eines Kafka-fähigen Event Hubs-Endpunkts

producer.config

Update der bootstrap.servers- und sasl.jaas.config-Werte in producer/src/main/resources/producer.config zur Weiterleitung des Producers an den Kafka-fähigen Event Hubs-Endpunkt mit der richtigen Authentifizierung.

bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
client.id=FlinkExampleProducer
sasl.mechanism=PLAIN
security.protocol=SASL_SSL
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";

Ausführen des Producers über die Befehlszeile

Zum Ausführen des Producers über die Befehlszeile generieren Sie die JAR-Datei. Führen Sie sie innerhalb von Maven aus (oder generieren Sie die JAR-Datei mit Maven, und führen Sie sie dann durch Hinzufügen der erforderlichen Kafka-JAR(s) an den Klassenpfad in Java aus):

mvn clean package
mvn exec:java -Dexec.mainClass="FlinkTestProducer"

Der Producer beginnt mit dem Senden von Ereignissen an den Event Hub zum Thema test und dem Drucken der Ereignisse an „stdout“.

Verwenden Sie das bereitgestellte Consumer-Beispiel, und empfangen Sie Nachrichten vom Event Hub.

Bereitstellen eines Kafka-fähigen Event Hubs-Endpunkts

consumer.config

Aktualisieren Sie die bootstrap.servers- und sasl.jaas.config-Werte in consumer/src/main/resources/consumer.config zur Weiterleitung des Consumers an den Kafka-fähigen Event Hubs-Endpunkt mit der richtigen Authentifizierung.

bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
group.id=FlinkExampleConsumer
sasl.mechanism=PLAIN
security.protocol=SASL_SSL
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";

Ausführen des Consumers über die Befehlszeile

Zum Ausführen des Consumers über die Befehlszeile generieren Sie die JAR-Datei, und führen Sie sie innerhalb von Maven aus (oder generieren Sie die JAR-Datei mit Maven, und führen Sie sie dann durch Hinzufügen der erforderlichen Kafka-JAR(s) an den Klassenpfad in Java aus):

mvn clean package
mvn exec:java -Dexec.mainClass="FlinkTestConsumer"

Wenn der Event Hub über Ereignisse verfügt (wenn der Producer z. B. ebenfalls ausgeführt wird), erhält der Consumer ab sofort Ereignisse aus dem Thema test.

Weitere Informationen zur Verbindung von Flink und Kafka finden Sie unter Flink's Kafka Connector Guide (Flinks Leitfaden zur Kafka-Verbindung).

Nächste Schritte

Weitere Informationen zu Event Hubs für Kafka finden Sie in folgenden Artikeln: