Шторм или Искра: выберите свое оружие в реальном времени

Идея бизнес-аналитики в реальном времени существует уже некоторое время (см. Страницу в Википедии по теме, начатой ​​в 2006 году). Но хотя люди говорили об этой идее в течение многих лет, я не видел, чтобы многие предприятия действительно принимали это видение, не говоря уже о тех преимуществах, которые оно дает.

По крайней мере, отчасти причина заключалась в отсутствии инструментов для внедрения бизнес-аналитики и аналитики в реальном времени. Традиционные среды хранилищ данных были в значительной степени ориентированы на пакетные операции с чрезвычайно высокими задержками, были невероятно дорогими или и тем, и другим.

Чтобы это изменить, появился ряд мощных и простых в использовании платформ с открытым исходным кодом. Двумя наиболее известными из них являются Apache Storm и Apache Spark, которые предлагают возможности обработки в реальном времени для гораздо более широкого круга потенциальных пользователей. Оба являются проектами в рамках Apache Software Foundation, и, хотя эти два инструмента предоставляют перекрывающиеся возможности, каждый из них имеет отличительные особенности и роли.

Storm: Hadoop обработки в реальном времени

Storm, среда распределенных вычислений для обработки потока событий, начала свое существование как проект BackType, компании по маркетинговым исследованиям, купленной Twitter в 2011 году. Twitter вскоре открыл исходный код проекта и разместил его на GitHub, но Storm в конечном итоге перешел на Apache Incubator и стал проектом верхнего уровня Apache в сентябре 2014 года.

Storm иногда называют Hadoop обработки в реальном времени. Документация Storm, похоже, соглашается: «Storm упрощает надежную обработку неограниченных потоков данных, делая для обработки в реальном времени то, что Hadoop делал для пакетной обработки».

Для достижения этой цели Storm разработан для обеспечения высокой масштабируемости, поддерживает отказоустойчивость с подходом к процессам «быстрый отказ, автоматический перезапуск» и предлагает надежную гарантию того, что каждый кортеж будет обработан. По умолчанию Storm дает гарантию «хотя бы один раз» для сообщений, но также предлагает возможность реализовать обработку «точно один раз».

Storm написан в основном на Clojure и предназначен для поддержки соединения «носиков» (входные потоки) и «болтов» (модулей обработки и вывода) вместе в виде ориентированного ациклического графа (DAG), называемого топологией. Топологии Storm работают в кластерах, а планировщик Storm распределяет работу по узлам кластера в зависимости от конфигурации топологии.

Вы можете думать о топологиях как о примерно аналогичных заданию MapReduce в Hadoop, за исключением того, что, учитывая сосредоточенность Storm на потоковой обработке в реальном времени, топологии по умолчанию работают вечно или до тех пор, пока не будут завершены вручную. Как только топология запущена, носики переносят данные в систему и передают данные болтам (которые, в свою очередь, могут передавать данные последующим болтам), где выполняется основная вычислительная работа. В процессе обработки один или несколько болтов могут записывать данные в базу данных или файловую систему, отправлять сообщение в другую внешнюю систему или иным образом делать результаты вычислений доступными для пользователей.

Одна из сильных сторон экосистемы Storm - это богатый набор доступных носиков, специализирующихся на приеме данных из всех типов источников. Хотя вам, возможно, придется писать собственные носики для узкоспециализированных приложений, есть большая вероятность, что вы сможете найти существующий носик для невероятно большого количества источников - от API потоковой передачи Twitter до Apache Kafka и брокеров JMS и всего, что между ними.

Существуют адаптеры, упрощающие интеграцию с файловыми системами HDFS, а это означает, что Storm может легко взаимодействовать с Hadoop при необходимости. Еще одна сильная сторона Storm - это поддержка многоязычного программирования. Хотя сам Storm основан на Clojure и работает на JVM, spouts и bolts могут быть написаны практически на любом языке, включая языки, отличные от JVM, которые используют протокол для связи между компонентами с использованием JSON через stdin / stdout.

Короче говоря, Storm - это очень масштабируемая, быстрая, отказоустойчивая система с открытым исходным кодом для распределенных вычислений, уделяющая особое внимание потоковой обработке. Storm отлично справляется с обработкой событий и инкрементными вычислениями, вычисляя скользящие метрики в реальном времени по потокам данных. Хотя Storm также предоставляет примитивы для включения универсального распределенного RPC и теоретически может использоваться для сборки практически любого задания распределенных вычислений, его сильной стороной, несомненно, является обработка потока событий.

Spark: Распределенная обработка для всех

Spark, еще один проект, предназначенный для распределенных вычислений в реальном времени, начинался как проект AMPLab в Калифорнийском университете в Беркли, а затем присоединился к инкубатору Apache и окончательно завершился как проект верхнего уровня в феврале 2014 года. Как и Storm, Spark поддерживает потоки. -ориентированная обработка, но это скорее универсальная платформа распределенных вычислений.

Таким образом, Spark можно рассматривать как потенциальную замену функциям MapReduce в Hadoop, в то время как Spark может работать поверх существующего кластера Hadoop, полагаясь на YARN для планирования ресурсов. В дополнение к Hadoop YARN, Spark может располагаться поверх Mesos для планирования или работать как автономный кластер с использованием встроенного планировщика. Обратите внимание, что если Spark не используется с Hadoop, при работе в кластере по-прежнему требуется какой-либо тип сетевой / распределенной файловой системы (NFS, AFS и т. Д.), Поэтому каждый узел будет иметь доступ к базовым данным.

Spark написан на Scala и, как и Storm, поддерживает многоязычное программирование, хотя Spark предоставляет конкретную поддержку API только для Scala, Java и Python. Spark не имеет специфической абстракции «носика», но включает адаптеры для работы с данными, хранящимися в многочисленных разрозненных источниках, включая файлы HDFS, Cassandra, HBase и S3.

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

Spark также предоставляет чрезвычайно удобную интерактивную оболочку, которая позволяет быстро создавать прототипы и проводить исследовательский анализ данных в режиме реального времени с использованием API Scala или Python. Работая в интерактивной оболочке, вы быстро заметите еще одно важное различие между Spark и Storm: Spark имеет более «функциональный» оттенок, где работа с API в большей степени зависит от цепочки последовательных вызовов методов для вызова примитивных операций - в отличие от Модель шторма, которая обычно управляется путем создания классов и реализации интерфейсов. Ни один из подходов не лучше или хуже, но стиль, который вы предпочитаете, может повлиять на ваше решение, какая система лучше подходит для ваших нужд.

Как и Storm, Spark рассчитан на огромную масштабируемость, и команда Spark задокументировала пользователей системы, использующих производственные кластеры с тысячами узлов. Кроме того, Spark победил в недавнем конкурсе Daytona GraySort 2014 года, что стало лучшим временем для выполнения рабочей нагрузки, состоящей из сортировки 100 ТБ данных. Команда Spark также документирует операции Spark ETL с рабочими нагрузками в несколько петабайт.

Spark - это быстрая, масштабируемая и гибкая распределенная вычислительная платформа с открытым исходным кодом, совместимая с Hadoop и Mesos, которая поддерживает несколько вычислительных моделей, включая потоковую передачу, графоцентрические операции, доступ к SQL и распределенное машинное обучение. Было документально подтверждено, что Spark исключительно хорошо масштабируется и, как и Storm, является отличной платформой для построения системы аналитики и бизнес-аналитики в реальном времени.

Принятие решения

Как выбрать между Storm и Spark?

Если ваши требования в первую очередь сосредоточены на потоковой обработке и обработке в стиле CEP, и вы начинаете новый проект со специально созданным кластером для этого проекта, я, вероятно, предпочел бы Storm, особенно когда доступны существующие выпускные отверстия Storm, соответствующие вашим требованиям интеграции. . Это ни в коем случае не жесткое правило, но такие факторы, по крайней мере, позволяют предположить, что начать со Storm.

С другой стороны, если вы используете существующий кластер Hadoop или Mesos и / или если ваша обработка требует существенных требований для обработки графов, доступа к SQL или пакетной обработки, вы можете сначала взглянуть на Spark.

Еще один фактор, который следует учитывать, - это многоязыковая поддержка двух систем. Например, если вам нужно использовать код, написанный на R или любом другом языке, который изначально не поддерживается Spark, то у Storm есть преимущество более широкой языковой поддержки. Точно так же, если вам нужна интерактивная оболочка для исследования данных с использованием вызовов API, Spark предлагает вам функцию, которой нет у Storm.

В конце концов, вы, вероятно, захотите провести подробный анализ обеих платформ, прежде чем принимать окончательное решение. Я рекомендую использовать обе платформы для создания небольшого доказательства концепции, а затем запустить свои собственные тесты производительности с рабочей нагрузкой, которая максимально точно отражает ваши ожидаемые рабочие нагрузки, прежде чем полностью принять любую из них.

Конечно, вам не нужно принимать решение «или-или». В зависимости от ваших рабочих нагрузок, инфраструктуры и требований вы можете обнаружить, что идеальным решением является смесь Storm и Spark, а также других инструментов, таких как Kafka, Hadoop, Flume и т. Д. В этом и заключается красота открытого исходного кода.

Какой бы маршрут вы ни выбрали, эти инструменты демонстрируют, что игра бизнес-аналитики в реальном времени изменилась. Мощные возможности, которые раньше были доступны лишь немногим избранным, теперь доступны большинству, если не всем, организациям среднего и крупного размера. Воспользуйтесь ими.