Чтение API-интерфейса Google Dataflow, создается впечатление, что он очень похож на то, что делает Apache Storm. Обработка данных в реальном времени через поток конвейерной обработки. Если я не полностью упустил точку здесь, вместо того, чтобы создавать мосты о том, как выполнять конвейеры, написанные друг против друга, я ожидал бы чего-то отличного от Google, а не изобретая колесо. Apache Storm уже хорошо размещен и может использоваться на любом языке программирования. Какова реальная ценность для этого?
Google Dataflow vs Apache Storm
Ответ 1
Благодарим вас за интерес к модели программирования Dataflow! Это правда, что как поток данных, так и Apache Storm поддерживают обработку потока, но есть важные отличия:
-
Dataflow поддерживает как пакетное, так и потоковое вычисление под одним и тем же API-интерфейсом окон, в то время как Storm, насколько мне известно, представляет собой поточную систему.
-
API для определения топологии вычислений сильно отличается в Dataflow и Storm. API потока данных в основном имитирует FlumeJava: вы управляете логическими объектами PCollection (параллельные коллекции, вы можете считать их логическими наборы данных), подобно тому, как вы будете манипулировать реальными коллекциями и создавать новые коллекции из результатов применения различных параллелизуемых операций (например, ParDo) в другие коллекции. Напротив, в Apache Storm вы строите сеть вычислений непосредственно из "носиков" и "болтов"; нет явного представления о логическом наборе данных или о параллельной операции, о которой я знаю.
-
Логическое представление конвейера в Dataflow позволяет фреймворку выполнять оптимизации, аналогичные тем, которые выполняются оптимизаторами запросов в системах баз данных, например. избегать или вводить материализацию определенных промежуточных результатов, перемещаться или исключать операции "по одному" и т.д. Вы можете увидеть обзор этих оптимизаций в документе FlumeJava. Это полезно как в пакетном режиме, так и в потоковом режиме.
-
Гарантии согласованности между моделью потоковой передачи данных и потоками Storm различны. Это на самом деле увлекательная тема! Я предлагаю прочитать документ Millwheel (на котором основана потоковая часть Dataflow) для обзора проблем отказоустойчивости и согласованности в потоковая система. Я считаю, что в документе кратко сравнивается Millwheel со Storm. Вы можете найти более широкое обсуждение важности гарантий согласованности в потоковых системах и силе согласованности, заданной Dataflow, в разговоре Have Your Cake and Eat Это слишком - Дальнейшее распространение мифов лямбда-архитектуры.
-
Одно из основных предложений стоимости Dataflow как части Облачной платформы Google - ноль: вам не нужно настраивать кластер, настраивать систему мониторинга и т.д.: вы просто отправляете свои конвейер в облачный API и система выделяет ресурсы для него, выполняет ваш конвейер, используя их, контролирует его для вас. Это, возможно, не связано с вашим вопросом о сходстве модели программирования.
Ответ 2
Нет, это совсем другие рамки. Dataflow является преемником FlumeJava, таким образом, что Crunch и в меньшей степени Spark. Это действительно соответствует Искры. Проект Spark Streaming ориентирован на поддержку потоковой передачи данных, и они оба являются ближайшим аналогом Storm (+ Trident). Но это действительно часть Dataflow, которая сопоставляется с Storm.
Поток потоков Spark Streaming и потоков данных больше похожи друг на друга, чем на Storm + Trident. Если вы прочтете сравнение Spark Streaming и Storm онлайн, оно будет в основном применяться к потоку данных.
Одна из приятных особенностей потоковой передачи данных - это то, что она интегрирована с не потоковым ядром. Поток данных в основном не связан с потоковой передачей; Шторм все течет.