Zastrzeżenie : Jestem promotorem Apache Flink i członkiem PMC i znam tylko wysokopoziomowy projekt Storm, a nie jego elementy wewnętrzne.
Apache Flink to platforma do ujednoliconego przetwarzania strumieniowego i wsadowego. Środowisko uruchomieniowe Flink natywnie obsługuje obie domeny ze względu na potokowe przesyłanie danych między równoległymi zadaniami, które obejmują potokowe tasowanie. Rekordy są natychmiast wysyłane z zadań produkcyjnych do zadań odbiorczych (po zebraniu w buforze do transferu sieciowego). Zadania wsadowe mogą być opcjonalnie wykonywane przy użyciu blokowania przesyłania danych.
Apache Spark to platforma obsługująca również przetwarzanie wsadowe i strumieniowe. Batch API Flink wygląda dość podobnie i dotyczy podobnych przypadków użycia jak Spark, ale różni się wewnętrznymi. W przypadku przesyłania strumieniowego oba systemy stosują bardzo różne podejścia (mini-partie vs. przesyłanie strumieniowe), co czyni je odpowiednimi do różnych rodzajów aplikacji. Powiedziałbym, że porównanie Sparka i Flinka jest poprawne i przydatne, jednak Spark nie jest najbardziej podobnym silnikiem przetwarzania strumienia do Flinka.
Wracając do pierwotnego pytania, Apache Storm to procesor strumienia danych bez możliwości wsadowych. W rzeczywistości potokowy silnik Flinka wewnętrznie wygląda trochę podobnie do Storm, tj. Interfejsy równoległych zadań Flinka są podobne do śrub Storma. Storm i Flink mają wspólną cechę, że ich celem jest przetwarzanie strumienia o niskim opóźnieniu przez potokowe przesyłanie danych. Jednak Flink oferuje bardziej zaawansowane API w porównaniu do Storm. Zamiast implementować funkcjonalność śrub z jednym lub kilkoma czytnikami i kolekcjonerami, API DataStream firmy Flink zapewnia funkcje takie jak Map, GroupBy, Window i Join. Wiele z tych funkcji należy zaimplementować ręcznie podczas korzystania ze Storm. Kolejną różnicą jest semantyka przetwarzania. Storm gwarantuje przetwarzanie przynajmniej raz, podczas gdy Flink zapewnia dokładnie raz. Implementacje, które dają te gwarancje przetwarzania, różnią się znacznie. Podczas gdy Storm używa potwierdzeń na poziomie rekordu, Flink używa wariantu algorytmu Chandy-Lamport. Krótko mówiąc, źródła danych okresowo wprowadzają znaczniki do strumienia danych. Za każdym razem, gdy operator otrzyma taki znacznik, sprawdza swój stan wewnętrzny. Kiedy znacznik został odebrany przez wszystkie ujścia danych, znacznik (i wszystkie rekordy, które zostały wcześniej przetworzone) są zatwierdzane. W przypadku awarii wszyscy operatorzy źródeł są resetowani do stanu, w którym widzieli ostatni zatwierdzony znacznik, a przetwarzanie jest kontynuowane. To podejście do punktów kontrolnych znaczników jest lżejsze niż rekordy potwierdzeń Storm. To źródła danych okresowo wprowadzają znaczniki do strumienia danych. Za każdym razem, gdy operator otrzyma taki znacznik, sprawdza swój stan wewnętrzny. Kiedy znacznik został odebrany przez wszystkie ujścia danych, znacznik (i wszystkie rekordy, które zostały wcześniej przetworzone) są zatwierdzane. W przypadku awarii wszyscy operatorzy źródeł są resetowani do stanu, w którym widzieli ostatni zatwierdzony znacznik, a przetwarzanie jest kontynuowane. To podejście do punktów kontrolnych znaczników jest lżejsze niż rekordy potwierdzeń Storm. To źródła danych okresowo wprowadzają znaczniki do strumienia danych. Za każdym razem, gdy operator otrzyma taki znacznik, sprawdza swój stan wewnętrzny. Kiedy znacznik został odebrany przez wszystkie ujścia danych, znacznik (i wszystkie rekordy, które zostały wcześniej przetworzone) są zatwierdzane. W przypadku awarii wszyscy operatorzy źródeł są resetowani do stanu, w którym widzieli ostatni zatwierdzony znacznik, a przetwarzanie jest kontynuowane. To podejście do punktów kontrolnych znaczników jest lżejsze niż rekordy potwierdzeń Storm. To wszyscy operatorzy źródeł są resetowani do swojego stanu, gdy zobaczyli ostatni zatwierdzony znacznik, a przetwarzanie jest kontynuowane. To podejście do punktów kontrolnych znaczników jest lżejsze niż rekordy potwierdzeń Storm. To wszyscy operatorzy źródeł są resetowani do swojego stanu, gdy zobaczyli ostatni zatwierdzony znacznik, a przetwarzanie jest kontynuowane. To podejście do punktów kontrolnych znaczników jest lżejsze niż rekordy potwierdzeń Storm. Tozestaw slajdów i odpowiednia dyskusja omawiają podejście Flink do przetwarzania strumieniowego, w tym odporność na błędy, punkty kontrolne i obsługę stanu.
Storm oferuje również dokładnie jednorazowe API wysokiego poziomu o nazwie Trident. Jednak Trident jest oparty na mini-partiach i dlatego jest bardziej podobny do Sparka niż do Flinka.
Regulowane opóźnienie Flink odnosi się do sposobu, w jaki Flink wysyła rekordy z jednego zadania do drugiego. Powiedziałem wcześniej, że Flink używa potokowego przesyłania danych i przekazuje rekordy, gdy tylko zostaną wyprodukowane. W celu zwiększenia wydajności rekordy te są gromadzone w buforze, który jest przesyłany przez sieć po zapełnieniu lub po przekroczeniu określonego progu czasowego. Ten próg kontroluje opóźnienie rekordów, ponieważ określa maksymalny czas, przez jaki rekord pozostanie w buforze bez wysyłania do następnego zadania. Nie można go jednak użyć do udzielenia twardych gwarancji co do czasu potrzebnego na wejście rekordu do wyjścia z programu, ponieważ zależy to również między innymi od czasu przetwarzania zadań i liczby transferów sieciowych.