2015-06-07 22 views
83

Flink został compared to Spark, który, jak widzę, jest błędnym porównaniem, ponieważ porównuje okienkowany system przetwarzania zdarzeń z mikropociągiem; Podobnie, nie ma większego sensu porównywanie Flinka z Samzą. W obu przypadkach porównuje strategię przetwarzania zdarzenia w czasie rzeczywistym z partiami, nawet jeśli ma mniejszą "skalę" w przypadku Samzy. Chciałbym jednak wiedzieć, jak Flink porównuje się do Storma, który wydaje się konceptualnie bardziej podobny do tego.Jaka jest główna różnica między Flink a Storm?

Znalazłem (Slajd # 4) dokumentujący główną różnicę jako "regulowane opóźnienie" dla Migotania. Kolejną wskazówką wydaje się być artykuł autorstwa Slicon Angle, który sugeruje, że Flink lepiej integruje się ze światem Spark lub HadoopMR, ale żadne konkretne szczegóły nie są wspomniane ani przywoływane. Wreszcie, sam Fabian Hueske zauważa in an interview, że "W porównaniu do Apache Storm, funkcja analizy strumieniowej Flink oferuje API wysokiego poziomu i wykorzystuje bardziej lekką strategię tolerancji na błędy, aby zapewnić dokładnie jednokrotne gwarancje przetwarzania."

Wszystko to jest dla mnie trochę skąpe i nie całkiem rozumiem. Czy ktoś może wyjaśnić, jaki problem (s?) Z przetwarzaniem strumienia w Storm jest (są?) Dokładnie rozwiązany przez Flink? Czym jest Hueske, odnosząc się do problemów API i ich "bardziej lekkiej strategii tolerancji na błędy"?

+0

Zauważ, że Apache * Spark * (przedmiotem połączonym pytanie) nie jest taka sama jak Apache * Burza * (To pytanie tutaj) - tak, nie, to nie jest bynajmniej duplikat. – fnl

Odpowiedz

122

Nota prawna: Jestem uczestnikiem Apache Flink i członkiem PMC, który zna tylko zaawansowany projekt Storma, a nie jego elementy wewnętrzne.

Apache Flink to platforma do ujednoliconego przetwarzania strumieniowego i przetwarzania wsadowego. Środowisko wykonawcze Flink natywnie obsługuje obie domeny z powodu potokowanych transferów danych między równoległymi zadaniami, które obejmują tasowanie potokowe. Rekordy są natychmiast wysyłane z zadań produkcyjnych do zadań odbieranych (po zebraniu bufora do transferu sieciowego). Zadania wsadowe można opcjonalnie wykonywać za pomocą blokowania przesyłania danych.

Apache Spark to framework obsługujący przetwarzanie wsadowe i strumieniowe. Interfejs API wsadu Flink wygląda dość podobnie i odnosi się do podobnych przypadków użycia, takich jak Spark, ale różni się w wewnętrznych. W przypadku przesyłania strumieniowego oba systemy stosują bardzo różne podejścia (mini-partie a streaming), dzięki czemu nadają się do różnych zastosowań. Powiedziałbym, że porównywanie Spark i Flink jest poprawne i użyteczne, jednak Spark nie jest najbardziej podobnym do Flinka procesem przetwarzania strumienia.

Przechodząc do pierwotnego pytania, Apache Storm jest procesorem strumienia danych bez funkcji przetwarzania wsadowego. W rzeczywistości, silnik potoku Flink wygląda wewnętrznie podobnie jak Storm, tzn. Interfejsy równoległych zadań Flink są podobne do rygli Storma. Storm and Flink mają wspólną cechę, że dążą do przetwarzania strumienia o małym opóźnieniu przez przesyłanie danych potokowych. Jednak Flink oferuje bardziej zaawansowane API w porównaniu do Storm. Zamiast implementować funkcjonalność śrub z jednym lub większą liczbą czytników i kolektorów, Flink's DataStream API udostępnia funkcje takie jak Map, GroupBy, Window i Join. Duża część tej funkcjonalności musi zostać ręcznie zaimplementowana podczas korzystania z usługi Storm. Kolejną różnicą jest przetwarzanie semantyki. Storm gwarantuje co najmniej jednokrotne przetwarzanie, podczas gdy Flink zapewnia dokładnie jeden raz. Implementacje, które dają te gwarancje przetwarzania, różnią się nieco. Podczas gdy Storm używa potwierdzeń na poziomie rekordu, Flink używa wariantu algorytmu Chandy-Lamport. W skrócie, źródła danych okresowo wprowadzają znaczniki do strumienia danych. Kiedy operator otrzymuje taki znacznik, sprawdza jego stan wewnętrzny. Kiedy znacznik został odebrany przez wszystkie pochłaniacze danych, znacznik (i wszystkie rekordy, które zostały wcześniej przetworzone) zostały zatwierdzone. W przypadku awarii wszystkie operatory źródeł są resetowane do stanu, gdy zobaczyły ostatni zatwierdzony znacznik i przetwarzanie jest kontynuowane. To podejście oparte na punktach kontrolnych jest bardziej lekkie niż potwierdzenia rekordów Storma. Ten slide set i odpowiadający mu talk omawiają sposób przetwarzania strumieniowego Flink, obejmujący tolerancję błędu, punkt kontrolny i obsługę stanu.

Storm oferuje również dokładnie jednokrotne API wysokiego poziomu o nazwie Trident. Jednak Trident opiera się na mini-partiach, a więc bardziej przypomina Spark niż Flink.

Regulowane opóźnienie migotania odnosi się do sposobu, w jaki funkcja Miga wysyła rekordy z jednego zadania do drugiego. Powiedziałem wcześniej, że Flink wykorzystuje przesyłanie danych potokowych i przekazuje rekordy natychmiast po ich wyprodukowaniu. W celu uzyskania efektywności te zapisy są gromadzone w buforze, który jest przesyłany przez sieć, gdy jest pełny lub określony próg czasowy jest spełniony. Ten próg kontroluje opóźnienie rekordów, ponieważ określa maksymalny czas pozostania rekordu w buforze bez przesłania go do następnego zadania. Nie można jednak jej użyć do udzielenia twardych gwarancji co do czasu, w jakim rekord wchodzi do opuszczenia programu, ponieważ zależy to również od czasu przetwarzania w ramach zadań i liczby transferów sieciowych między innymi.

+1

Bardzo dziękuję! Być może jeden punkt otwarty, jeśli mogę jeszcze raz zawracać ci głowę: na czym polega problem "regulowanego opóźnienia"? Wydaje się, że może to być dość istotne, ponieważ różne domeny aplikacji będą miały różne wymagania w tym zakresie. Czy możesz wyjaśnić, co to oznacza, przynajmniej pod względem Flink? – fnl

+4

Oczywiście, przedłużyłem swoją odpowiedź i omówiłem regulowane opóźnienie. Daj mi znać, jeśli masz dalsze pytania. –

30

Dodawanie do odpowiedzi Fabian Hueske:

Flink poprawia na Burzy dodatkowo również w jeden z następujących sposobów:

  • Backpressure: Streaming Runtime flink jest dobrze wychowane, gdy różne podmioty prowadzony przy różnych prędkościach, ponieważ operatorzy niższego szczebla bardzo skutecznie wytwarzają ciśnienie dla operatorów działających na wyższym poziomie, chociaż warstwa sieci zarządza pulami buforów.

  • Stan zdefiniowany przez użytkownika: Migotanie pozwala programom na zachowanie własnego stanu operatorów. Ten stan może faktycznie uczestniczyć w punktach kontrolnych w zakresie tolerancji błędów, zapewniając dokładnie raz gwarancji dla niestandardowego stanu zdefiniowanego przez użytkownika. Zobacz this example komputera zdefiniowanego przez użytkownika wewnątrz operatora, który jest konsekwentnie kontrolowany razem ze strumieniem danych.

  • Strumieniowe przesyłanie strumieniowe: tworzenie okien i agregacja okien to kluczowe elementy do analizy strumieni danych. Flink ma dość mocny system okienkowania, który obsługuje wiele typów okien.

+0

Odnośnie twojego pierwszego punktu, Storm jest dobrze zachowany pod przeciwciśnieniem od 1.0 (wydany 2016) –