2015-06-07 2 views
83

Flink был compared to Spark, который, как я вижу, является неправильным сравнением, поскольку он сравнивает оконную систему обработки событий с микрозарядом; Точно так же это не имеет большого значения для меня, чтобы сравнить Флинка с Самсой. В обоих случаях он сравнивает в реальном времени и стратегию пакетной обработки событий, даже если в меньшем «масштабе» в случае Samza. Но я хотел бы знать, как Флинк сравнивается со Штормом, который кажется концептуально более похожим на него.Каковы основные различия между Flink и Storm?

Я нашел this (Слайд №4), документируя основное различие как «регулируемую задержку» для Flink. Другим намеком является статья от Slicon Angle, в которой показано, что Flink лучше интегрируется в мир Spark или HadoopMR, но никаких конкретных данных не упоминается и не упоминается. Наконец, сам Фабиан Хюске отмечает in an interview: «По сравнению с Apache Storm функциональность анализа потока Flink предлагает API высокого уровня и использует более легкую стратегию отказоустойчивости, обеспечивающую точно определенные гарантии обработки».

Все, что для меня немного редки, и я не совсем понимаю. Может кто-нибудь объяснить, какие проблемы (с?) С потоковой обработкой в ​​Storm есть (есть?), Которые точно решаются Flink? Что такое Hueske, ссылаясь на проблемы API и их «более легкую стратегию отказоустойчивости»?

+0

Обратите внимание, что Apache * Spark * (в центре внимания связанного вопроса) не совпадает с Apache * Storm * (этот вопрос здесь) - так, нет, это отнюдь не дубликат. – fnl

ответ

122

Отказ от ответственности: Я участник коммандера Apache Flink и член PMC и знакомлюсь только с высокоуровневым дизайном Storm, а не с его внутренними элементами.

Apache Flink - это основа для унифицированного потока и пакетной обработки. Время выполнения Flink изначально поддерживает оба домена из-за конвейерной передачи данных между параллельными задачами, которые включают в себя конвейерные перетасовки. Записи немедленно отправляются с постановки задач на получение заданий (после сбора буфера для сетевой передачи). Пакетные задания можно выполнить, используя блокировку передачи данных.

Apache Spark - это основа, которая также поддерживает обработку пакетов и потоков. Пакетный API Flink выглядит довольно похожим и адресует аналогичные варианты использования как Spark, но отличается во внутренних деталях. Для потоковой передачи обе системы используют очень разные подходы (мини-партии против потоковой передачи), что делает их пригодными для различных приложений. Я бы сказал, что сравнение Spark и Flink действительно и полезно, однако Spark не самый похожий движок обработки потока для Flink.

Исходя из исходного вопроса, Apache Storm - это процессор потока данных без пакетных возможностей. Фактически, конвейерный двигатель Flink внутри выглядит немного похож на Storm, т. Е. Интерфейсы параллельных задач Flink аналогичны болтам Storm. Шторм и Флинк имеют общее сходство, что они нацелены на обработку потоков с низкой задержкой путем конвейерной передачи данных. Тем не менее, Flink предлагает более высокоуровневый API по сравнению со Storm. В дополнение к функциональности болтов с одним или несколькими считывателями и сборщиками API DataStream от Flink предоставляет такие функции, как Map, GroupBy, Window и Join. Многие из этих функций должны быть реализованы вручную при использовании Storm. Еще одно отличие - обработка семантики. Storm гарантирует обработку по крайней мере один раз, в то время как Flink обеспечивает ровно один раз. Реализации, которые дают эти гарантии обработки, немного отличаются. Хотя Storm использует подтверждения уровня записи, Flink использует вариант алгоритма Chandy-Lamport. В двух словах источники данных периодически вводят маркеры в поток данных. Всякий раз, когда оператор получает такой маркер, он контролирует свое внутреннее состояние. Когда маркер был получен всеми приемниками данных, маркер (и все записи, которые были обработаны до этого), были зафиксированы. В случае сбоя все операторы источников возвращаются в состояние, когда они видели последний зафиксированный маркер, и обработка продолжается. Этот подход маркер-контрольно-пропускной пункт является более легким, чем признание рекордного уровня Storm. В этом slide set и соответствующем talk обсуждается подход к потоковой обработке Flink, включая отказоустойчивость, контрольную точку и обработку состояния.

Storm также предлагает точно один раз высокоуровневый API под названием Trident. Однако Trident основан на мини-пакетах и, следовательно, больше похож на Spark, чем на Flink.

Регулируемая латентность Flink относится к тому, как Flink отправляет записи из одной задачи в другую. Я уже говорил, что Flink использует конвейерные передачи данных и пересылает записи, как только они будут созданы. Для эффективности эти записи собираются в буфере, который отправляется по сети после его заполнения или определенного порогового значения времени. Этот порог контролирует задержку записей, поскольку он определяет максимальное время, в течение которого запись будет оставаться в буфере, не отправляясь на следующую задачу. Однако он не может быть использован для предоставления жестких гарантий относительно времени, которое требуется для входа записи в программу, поскольку это также зависит от времени обработки задач и количества сетевых передач между прочим.

+1

Спасибо вам большое! Один открытый вопрос, может быть, если я снова буду беспокоить вас: что это за «регулируемая латентность»? Это похоже на то, что это может быть довольно актуальным, учитывая, что в разных областях применения разные приложения будут иметь разные требования. Можете ли вы объяснить, что это означает, по крайней мере, с точки зрения Флинка? – fnl

+4

Конечно, я продлил свой ответ и обсудил регулируемую задержку. Дайте мне знать, если у вас возникнут дополнительные вопросы. –

30

Добавление к ответу Fabian Hueske:

Flink улучшает на Шторма также дополнительно следующими способами:

  • противодавлении: потоковая среда FLiNK является хорошо себя, когда различные операторы работают на разных скоростях, потому что нисходящие операторы проталкивают вверх по течению операторов очень хорошо, хотя сетевой уровень управляет пулами буферов.

  • Пользовательское состояние: Flink позволяет программам поддерживать пользовательские состояния в ваших операторах. Это состояние может фактически участвовать в контрольной точке для отказоустойчивости, предоставляя точно определенные гарантии для пользовательского пользовательского состояния. См. this example пользовательского конечного автомата внутри оператора, который последовательно проверяется вместе с потоком данных.

  • Streaming Windows: потоковые окна и агрегации окон являются важнейшим строительным блоком для анализа потоков данных. Flink поставляется с довольно мощной системой окон, которая поддерживает множество типов окон.

+0

Что касается вашего первого пункта, Storm хорошо себя ведет под противодавлением с 1.0 (выпущен в апреле 2016 года) –

Смежные вопросы