Apache Storm

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:54, 25 декабря 2018.
Apache Storm
Apache Storm's Logo
Разработчики: Backtype, Twitter
Постоянный выпуск: 1.2.2 (4 июня 2018)
Состояние разработки: Активное
Написана на: Clojure & Java
Операционная система: Кросс-платформенная
Веб-сайт storm.apache.org

Apache Storm представляет собой фреймворк для распределенных потоковых вычислений в реальном времени.

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

Характеристика

Apache Storm является свободной распределенной системой вычислений в реальном времени с открытым исходным кодом [Источник 1]. Storm упрощает надежную обработку неограниченных потоков данных, делая в режиме реального времени то же, что и делает Hadoop для пакетов данных.

Области применения

Storm имеет множество вариантов использования, например:

  • Аналитика в реальном времени
  • Машинное обучение онлайн
  • Непрерывные вычисления
  • Распределенный вызов удаленных процедур (RPC)
  • ETL (Extract, Transform, Load – извлечение, преобразование и загрузка данных)

Ключевые особенности

Apache Storm обладает несколькими ключевыми особенностями.

Интеграция

Storm интегрируется с любой системой очередей и любой системой баз данных [Источник 2].

Абстракция spout упрощает интеграцию новой системы очередей. Существуют реализации для следующих систем очередей:

  • Kestrel
  • RabbitMQ / AMQP
  • Kafka
  • JMS
  • Amazon Kinesis

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

Масштабируемость

Топологии Storm изначально параллельны и работают в кластере машин. Различные части топологии можно масштабировать по отдельности, изменяя их параллелизм. Используя команду "rebalance" можно регулировать параллельность запуска топологий на лету. Присущий Apache Storm параллелизм означает, что он может обрабатывать очень большое количество сообщений с очень низкой задержкой [Источник 3].

Отказоустойчивость

Apace Storm отказоустойчив: когда воркеры (workers – иначе говоря, фоновые задачи) перестают работать, шторм автоматически перезапускает их. Если же перестает работать узел, воркер будет перезапущен на другом узле. Демоны Storm, такие как Nimbus и Supervisors, предназначены специально для отказоустойчивости. Так что если они перестанут работать, они перезапустятся как ни в чем не бывало. Это означает, что вы можете убить (командой kill -9) их, не влияя на работоспособность кластера или топологий [Источник 4].

Гарантия обработки данных

Storm гарантирует, что каждый кортеж данных будет полностью обработан [Источник 5]. Одним из основных механизмов Apache Storm является возможность отслеживать происхождение кортежа, поскольку он проходит через топологию чрезвычайно эффективным способом. Базовые абстракции Storm предоставляют гарантию обработки хотя бы один раз, такую же гарантию вы получаете при использовании системы массового обслуживания. Сообщения воспроизводятся только в случае сбоев. Кроме того, используя Trident, абстракцию более высокого уровня по сравнению с базовыми абстракциями Storm, вы можете достичь однократной семантики обработки.

Легкость развертывания и поддержки

Кластеры Apache Storm просты в развертывании и требуют минимальной настройки для запуска [Источник 6]. Storm обладает стандартным набором конфигураций для развертывания кластера. В случае, если вы используете EC2, проект со Storm можно подготовить, настроить и установить с нуля нажатием одной кнопки.

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

Требования к платформе

В качестве операционной системы возможен выбор любого дистрибутива Linux. Ниже приведены требования к техническим характеристикам систем [Источник 7].

Для разработки:

  • Минимально 2 Гб ОЗУ
  • 1 Тб накопитель

Для систем в работе:

  • Минимально 16 Гб ОЗУ, рекомендуется 32 Гб и более для каждой машины
  • 6-ядерный процессор, 2 ГГц
  • 4x2 Тб накопители
  • 1 Гбит/с сеть

Концепции

Apache Storm читает поток "сырых" данных на входе, пропускает его через последовательность небольших обработчиков и далее подает на выход результат обработки. Диаграмма, представленная на рисунке 1, иллюстрирует основные концепции Apache Storm.

Рисунок 1 – основные концепции Apache Storm

API

Storm имеет простой и легкий в использовании API [Источник 8]. При программировании вы управляете потоками кортежей (tuple) и преобразуете их, а кортеж представляет собой именованный список значений. Кортежи могут содержать объекты любого типа. В то же время, если вы хотите использовать тип, неизвестный Storm, то очень легко зарегистрировать сериализатор для этого типа.

В Storm есть только три абстракции: spouts, bolts и topologies. Spout является источником потоков вычисления. Обычно spout читает из брокеров очередей, таких как Kestrel, RabbitMQ, или Kafka, но spout также может создать собственную stream или читать откуда-либо, например, потокового API Twitter. Реализации spout уже существуют для большинства систем очередей.

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

Topology представляет собой сеть spouts и bolts, причем каждое ребро в сети представляет собой bolt, подписанный на выходной поток другого spout или bolt. Topology – это сколь угодно сложное многоступенчатое потоковое вычисление. Topologies выполняются бесконечно долго при развертывании.

Apache Storm имеет "локальный режим", в котором кластер Storm моделируется в процессе работы. Это полезно для разработки и тестирования. Клиент командной строки storm используется, когда готова к отправке topology для выполнения в реальном кластере.

Установка

Для установки Apache Storm необходимо выполнить следующие действия:

  1. Установить zookeeper.
  2. Скачать архив с официального сайта, распаковать, прописать настройки хостов в conf/storm.yaml (см. видео)
  3. Запустить nimbus, supervisor, ui
  4. Открыть веб-интерфейс на 8080 порту выбранного хоста

Источники

  1. Apache Storm // Welcome to The Apache Software Foundation. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/ (дата обращения: 30.11.2018).
  2. Integrates // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/integrates.html (дата обращения: 30.11.2018).
  3. Scalable // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/scalable.html (дата обращения: 30.11.2018).
  4. Fault Tolerant // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/fault-tolerant.html (дата обращения: 30.11.2018).
  5. Guarantees Data Processing // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/guarantees-data-processing.html (дата обращения: 30.11.2018).
  6. Easy to deploy and operate // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/deployment.html (дата обращения: 30.11.2018).
  7. Apache Storm - Installation and Configuration Tutorial // Online Certification Training Courses for Professionals | Simplilearn. [2009 – 2018]. Дата обновления: 30.11.2018. URL: https://www.simplilearn.com/apache-storm-installation-and-configuration-tutorial-video (дата обращения: 30.11.2018).
  8. Simple API // Apache Storm. [2018]. Дата обновления: 30.11.2018. URL: https://storm.apache.org/about/simple-api.html (дата обращения: 30.11.2018).