2017-09-20 6 views
0

Ich plane eine Anwendung, die von Apache Kafka liest und nach (möglicherweise zeitaufwändiger) Verarbeitung Daten in einer Datenbank speichert.Skalierung mit Apache Spark/Apache Flink

Mein Fall sind Nachrichten, nicht Streams, aber für die Skalierbarkeit denke ich über das Einstecken in Spark oder Flink, kann aber nicht verstehen, wie diese Skala: sollte meine App, wenn ein Teil von Spark/Flink, etwas lesen Daten von Kafka und dann verlassen oder weiterlesen?

Wie entscheidet Spark/Flink dann, dass sie mehr Instanzen meiner App generieren müssen, um den Durchsatz zu verbessern?

Danke!

+0

Spark hat Dynamic Allocation, es wird neue Executors erstellen, wenn - soweit ich mich erinnere - Microbatch-Dauer kommt näher an Microbatch-Intervall –

+0

Ich bin neu in beiden - wie meine App sollte sich verhalten? soll es nur einmal von Kafka gelesen und verlassen werden? Wie würde Spark/Flink wissen, dass neue Jobs zum Lesen erstellt werden müssen, wenn sich mehr Daten in der Warteschlange befinden? – estoy

+0

Einfach einen Streaming Job erstellen, Spark skaliert die Anzahl der Executoren automatisch –

Antwort

1

In Apache Flink können Sie die Parallelität der Vorgänge definieren, indem die env.setParallelism(#parallelism) Einstellung aller Operatoren mit #parallelism parallelen Instanzen laufen zu machen, oder Sie können auch definieren/außer Kraft setzen sie pro Bediener wie dataStream.map(...).setParallelism(#parallelism);.

Für weitere Informationen Überprüfen Sie Flink docs https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/parallel.html.

von Kafa In Bezug auf das Lesen können Sie die parallele Empfänger definieren (gleiche Gruppe) mit den Kafka Thema Partitionen maßstäblich nach oben/unten: env.addSource(kafkaConsumer).setParallelism(#topicPartitions)

prüfen Kafka Dokumentation für weitere Informationen über Kafka Thema und Partitionen und Verbrauchergruppe: https://kafka.apache.org/documentation/ .

Beachten Sie, dass wenn Sie die Parallelitätsstufe nicht innerhalb des Flink-Programms angeben und Sie es auf dem lokalen Flink-Cluster bereitstellen. Der Wert parallelism.default Parameter in der Konfigurationsdatei flinkDir/conf/flink-conf.yaml wird verwendet. Es sei denn Sie spezifizieren es durch die -p wie ./bin/flink run .... -p #parallelism. Überprüfen Sie Flink cli options.

+0

Danke, Ehab, ich habe eine erstellt job über 'flink run' in cmdline, aber sollte ich das auf jedem server ausführen, oder wird Flink irgendwie dafür sorgen, dass dieser job verteilt wird? Ich interessiere mich für Parallelität von Jobs, nicht Betreiber, also denke ich, dass dies durch Task Slots gelöst werden kann? – estoy

+0

@estoy Sie geben nur den Grad der Parallelität für die Betreiber und Flink kümmert sich um den Rest. Der Programmcode wird in ein Datenflussdiagramm von verketteten Teilaufgaben konvertiert. Check [hier] (https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html) für weitere Details. Was meinst du mit zunehmender Parallelität von Jobs? –

+0

was ich sicherstellen will ist dies: ein dokument auf kafka-> ein flink job verarbeitet es. zwei dokumente an kafa -> zwei flink-jobs verarbeiten sie parallel. ohne die zweite warten auf die erste zu beenden – estoy