Python-Flink-Tutorial
In diesem Tutorial erfahren Sie, wie Sie Apache Flink, ein Open-Source-Stream-Verarbeitungs- und Stapelverarbeitungs-Framework, unter Verwendung der Programmiersprache Python bedienen und verwenden. In diesem Tutorial erfahren Sie, wie Sie mit der Python-Flink-API Streaming- und Batch-Anwendungen erstellen.
Umgebungseinstellungen
Bevor Sie beginnen, müssen Sie die folgende Software und Bibliotheken installieren:
- Python 3.x
- Apache Flink 1.10.x
- Apache Beam 2.23.x
- PyFlink 1.10.x
Sie können PyFlink mit dem folgenden Befehl installieren:
pip install apache-flink
Beginnen Sie mit der Verwendung
Stream-Verarbeitung
Erstellen Sie einen Stream-Verarbeitungsauftrag
Zuerst müssen wir die notwendigen Bibliotheken importieren:
from pyflink.common.serialization import SimpleStringEncoder
from pyflink.common.typeinfo import Types
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.datastream.connectors import FlinkKafkaConsumer
from pyflink.datastream.functions import KeyedProcessFunction
from pyflink.table import StreamTableEnvironment
Dann müssen wir eine Stream-Verarbeitungsumgebung erstellen:
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(1)
t_env = StreamTableEnvironment.create(env)
Holen Sie sich Daten von Kafka
Als Nächstes rufen wir Daten aus einem Kafka-Thema ab. Zuerst müssen wir einen Kafka-Konsumenten erstellen:
properties = {
'bootstrap.servers': 'localhost:9092',
'group.id': 'test-group'
}
kafka_consumer = FlinkKafkaConsumer(
'test-topic',
SimpleStringEncoder(),
properties=properties
)
Anschließend können wir add_source()
diesen Verbraucher mit der folgenden Methode zur Stream-Verarbeitungsumgebung hinzufügen:
stream = env.add_source(kafka_consumer)
Daten konvertieren
Sobald wir die Daten aus dem Kafka-Thema erhalten, können wir die Daten transformieren und verarbeiten. Zum Beispiel können wir map()
die Methode verwenden, um die Daten aufzuteilen:
stream = stream.map(lambda x: (x.split(',')[0], int(x.split(',')[1])))
Verarbeitungslogik definieren
Als nächstes können wir eine Verarbeitungslogikfunktion definieren, zum Beispiel:
class MyProcessFunction(KeyedProcessFunction):
def process_element(self, value, ctx):
ctx.output(value[0], value[1])
Anschließend können wir process()
mithilfe der folgenden Methode Verarbeitungslogik auf den Stream anwenden:
stream.process(MyProcessFunction())
Ausgabeergebnis
Schließlich können wir print()
das Ergebnis mit der folgenden Methode ausdrucken:
stream.print()
Auftrag ausführen
Schließlich können wir execute()
die Methode verwenden, um den Stream-Verarbeitungsjob auszuführen:
env.execute('My Stream Job')
Stapelverarbeitung
Erstellen Sie einen Batch-Job
Zuerst müssen wir die notwendigen Bibliotheken importieren:
from pyflink.table import BatchTableEnvironment, EnvironmentSettings
Dann müssen wir eine Batch-Umgebung erstellen:
env_settings = EnvironmentSettings.new_instance().in_batch_mode().use_blink_planner().build()
t_env = BatchTableEnvironment.create(environment_settings=env_settings)
Daten lesen
Als nächstes können wir read_csv()
mit der Methode Daten aus der CSV-Datei lesen:
source = t_env.read_csv('data.csv', schema='name STRING, age INT')
Daten konvertieren
Sobald wir die Daten gelesen haben, können wir die Daten transformieren und verarbeiten. Mit der Methode können wir beispielsweise filter()
Daten herausfiltern, deren Alter größer als 18 ist:
result = source.filter('age > 18')
Ausgabeergebnis
Schließlich können wir to_pandas()
die Methode verwenden, um das Ergebnis in einen Pandas DataFrame zu konvertieren und auszudrucken:
result.to_pandas().head()
Auftrag ausführen
Schließlich können wir execute()
die Methode verwenden, um Batch-Jobs auszuführen:
t_env.execute('My Batch Job')
Zusammenfassen
In diesem Tutorial haben wir gelernt, wie man die Python-Flink-API zum Erstellen von Streaming- und Batch-Anwendungen verwendet. Wir haben gelernt, wie man Streaming- und Batch-Jobs erstellt, wie man Daten von Kafka erhält, wie man die Daten transformiert und verarbeitet und wie man die Ergebnisse ausgibt. Ich hoffe, dieses Tutorial hilft Ihnen!