Haftungsausschluss : Ich bin ein Apache Flink-Committer und PMC-Mitglied und nur mit Storms High-Level-Design vertraut, nicht mit seinen Interna.
Apache Flink ist ein Framework für die einheitliche Stream- und Stapelverarbeitung. Die Laufzeit von Flink unterstützt beide Domänen nativ aufgrund von Pipeline-Datenübertragungen zwischen parallelen Tasks, einschließlich Pipeline-Shuffles. Datensätze werden sofort von der Erstellung von Aufgaben zum Empfang von Aufgaben versendet (nachdem sie in einem Puffer für die Netzwerkübertragung gesammelt wurden). Stapeljobs können optional mit blockierenden Datenübertragungen ausgeführt werden.
Apache Spark ist ein Framework, das auch die Stapel- und Stream-Verarbeitung unterstützt. Die Batch-API von Flink sieht ziemlich ähnlich aus und behandelt ähnliche Anwendungsfälle wie Spark, unterscheidet sich jedoch in den Interna. Für das Streaming verfolgen beide Systeme sehr unterschiedliche Ansätze (Mini-Batches vs. Streaming), wodurch sie für verschiedene Arten von Anwendungen geeignet sind. Ich würde sagen, dass der Vergleich von Spark und Flink gültig und nützlich ist. Spark ist jedoch nicht die ähnlichste Stream-Verarbeitungs-Engine wie Flink.
Apache Storm ist ein Datenstromprozessor ohne Batch-Funktionen. Tatsächlich ähnelt der Pipeline-Motor von Flink intern Storm ein wenig, dh die Schnittstellen der parallelen Aufgaben von Flink ähneln denen von Storm. Storm und Flink haben gemeinsam, dass sie eine Stream-Verarbeitung mit geringer Latenz durch Pipeline-Datenübertragungen anstreben. Flink bietet jedoch im Vergleich zu Storm eine API auf höherer Ebene. Anstatt die Funktionalität eines Bolzens mit einem oder mehreren Lesegeräten und Kollektoren zu implementieren, bietet die DataStream-API von Flink Funktionen wie Map, GroupBy, Window und Join. Viele dieser Funktionen müssen bei Verwendung von Storm manuell implementiert werden. Ein weiterer Unterschied ist die Verarbeitungssemantik. Storm garantiert mindestens einmalige Verarbeitung, während Flink genau einmal liefert. Die Implementierungen, die diese Verarbeitungsgarantien geben, unterscheiden sich erheblich. Während Storm Bestätigungen auf Datensatzebene verwendet, verwendet Flink eine Variante des Chandy-Lamport-Algorithmus. Kurz gesagt, Datenquellen fügen regelmäßig Markierungen in den Datenstrom ein. Immer wenn ein Bediener eine solche Markierung erhält, überprüft er seinen internen Zustand. Wenn ein Marker von allen Datensenken empfangen wurde, werden der Marker (und alle zuvor verarbeiteten Datensätze) festgeschrieben. Im Falle eines Fehlers werden alle Quellenoperatoren auf ihren Status zurückgesetzt, als sie den letzten festgeschriebenen Marker gesehen haben, und die Verarbeitung wird fortgesetzt. Dieser Marker-Checkpoint-Ansatz ist leichter als Storms Bestätigungen auf Rekordniveau. Dies Datenquellen fügen regelmäßig Markierungen in den Datenstrom ein. Immer wenn ein Bediener eine solche Markierung erhält, überprüft er seinen internen Zustand. Wenn ein Marker von allen Datensenken empfangen wurde, werden der Marker (und alle zuvor verarbeiteten Datensätze) festgeschrieben. Im Falle eines Fehlers werden alle Quellenoperatoren auf ihren Status zurückgesetzt, als sie den letzten festgeschriebenen Marker gesehen haben, und die Verarbeitung wird fortgesetzt. Dieser Marker-Checkpoint-Ansatz ist leichter als Storms Bestätigungen auf Rekordniveau. Dies Datenquellen fügen regelmäßig Markierungen in den Datenstrom ein. Immer wenn ein Bediener eine solche Markierung erhält, überprüft er seinen internen Zustand. Wenn ein Marker von allen Datensenken empfangen wurde, werden der Marker (und alle zuvor verarbeiteten Datensätze) festgeschrieben. Im Falle eines Fehlers werden alle Quellenoperatoren auf ihren Status zurückgesetzt, als sie den letzten festgeschriebenen Marker gesehen haben, und die Verarbeitung wird fortgesetzt. Dieser Marker-Checkpoint-Ansatz ist leichter als Storms Bestätigungen auf Rekordniveau. Dies Alle Quellenbetreiber werden auf ihren Status zurückgesetzt, als sie den letzten festgeschriebenen Marker gesehen haben, und die Verarbeitung wird fortgesetzt. Dieser Marker-Checkpoint-Ansatz ist leichter als Storms Bestätigungen auf Rekordniveau. Dies Alle Quellenbetreiber werden auf ihren Status zurückgesetzt, als sie den letzten festgeschriebenen Marker gesehen haben, und die Verarbeitung wird fortgesetzt. Dieser Marker-Checkpoint-Ansatz ist leichter als Storms Bestätigungen auf Rekordniveau. DiesDer Foliensatz und der entsprechende Vortrag erläutern den Streaming-Verarbeitungsansatz von Flink, einschließlich Fehlertoleranz, Checkpointing und Statusbehandlung.
Storm bietet auch eine genau einmalige High-Level-API namens Trident. Trident basiert jedoch auf Mini-Batches und ist daher Spark ähnlicher als Flink.
Die einstellbare Latenz von Flink bezieht sich auf die Art und Weise, wie Flink Datensätze von einer Aufgabe zur anderen sendet. Ich habe bereits gesagt, dass Flink Pipeline-Datenübertragungen verwendet und Datensätze weiterleitet, sobald sie erstellt wurden. Aus Effizienzgründen werden diese Datensätze in einem Puffer gesammelt, der über das Netzwerk gesendet wird, sobald es voll ist oder ein bestimmter Zeitschwellenwert erreicht ist. Dieser Schwellenwert steuert die Latenz von Datensätzen, da er die maximale Zeit angibt, die ein Datensatz in einem Puffer verbleibt, ohne an die nächste Aufgabe gesendet zu werden. Es kann jedoch nicht verwendet werden, um feste Garantien für die Zeit zu geben, die ein Datensatz vom Aufrufen bis zum Verlassen eines Programms benötigt, da dies unter anderem auch von der Verarbeitungszeit innerhalb von Aufgaben und der Anzahl der Netzwerkübertragungen abhängt.