Apache Kafka Streams, Spark Streaming, Flink, Storm или Samza: что и когда выбирать для обработки потоков Big Data

Big Data, Большие данные, архитектура, обработка данных, Spark

Проанализировав сходства и различия пяти самых популярных Big Data фреймворков для распределенных потоковых вычислений (Apache Kafka Streams, Spark Streaming, Flink, Storm и Samza), в этой статье мы сравним их по 10 критериям и отметим, какие именно факторы являются наиболее значимыми для объективного выбора.

Сравнительный анализ самых популярных фреймворков потоковой обработки больших данных

Прежде всего, еще раз отметим, что Apache Kafka Streams, Spark Streaming, Flink, Storm и Samza являются надежными, отказоустойчивыми, масштабируемыми и распределенными решениями с кластерной архитектурой. Все они предназначены специально для обработки потоков Big Data «на лету», распределяя вычисления по направленной графовой модели потоковых обработчиков, называемой DAG-топологией (Directed Acyclic Graph).

Тем не менее, при всех вышеуказанных сходствах, они во многом существенно отличаются друг от друга. Для большей наглядности ниже представлена сравнительная таблица Apache Kafka Streams, Spark Streaming, Flink, Storm и Samza.

Критерий / Фреймворк

Kafka Streams

Apache Kafka Streams

Spark

Apache Spark

Flink

Apache Flink

Storm

Apache Storm

Samza

Apache Samza

Подходы к обработке данных

Только потоковый

Только микро-пакетный

Потоковый и пакетный

Потоковый и пакетный с помощью Trident API

Только потоковый

Задержка (latency)

Низкая (не более 1 миллисекунды)

Высокая (> 1 сек)

Низкая (не более 1 миллисекунды)

Низкая (не более 1 миллисекунды)

Низкая (не более 1 миллисекунды)

Потоковый примитив

Сообщение (message) потокового раздела (stream partition) соответствующее записи топика Кафка

Дискретизированный поток (DStream), микро-пакет из нескольких RDD (resilient distributed dataset) — отказоустойчивых распределенных датасетов

Поток данных (DataStream)

Кортеж (tuple) — поток данных в виде неизменяемых наборов пар ключ-значение

Сообщение (message) потокового раздела (stream partition) соответствующее записи топика Кафка

Вычислительный примитив

Потоковый обработчик (Stream Processor)

Задача (task)

Задача (task)

Болт (bolt) – потоковый обработчик

Задача (task)

Семантика доставки сообщений

exactly once

exactly once

exactly once

at-least-once и exactly once с помощью Trident API

at-least-once

Сохранение состояния приложений (stateful)

Да, состояние сохраняется во внутренних хранилищах топиков Кафка

Да, состояние сохраняется во внешней распределенной файловой системе, например, HDFS

Да, состояние сохраняется в локальном хранилище, а затем перемещается во внешнее долговременное хранилище

Изначально нет (stateless), но Trident API позволяет сохранять состояние

Да, состояние сохраняется во встроенном хранилище пар ключ-значение

Источники и приемники данных

Apache Kafka

Apache Kafka, Cassandra, HDFS, OpenStack Swift, Cassandra, Amazon S3, Kudu, MapR-FS

Apache Kafka, Cassandra, Amazon Kinesis, HBase, HDFS,  Google Cloud Platform

Apache Kafka, Kestrel, Amazon Kinesis, HBase, Cassandra, RabbitMQ, JMS

Apache Kafka

Инструменты отказоустойчивости

механизм транзакционности сообщений

механизм контрольных точек (checkpoints)

механизм контрольных точек (checkpoints)

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

механизм транзакционности сообщений

Избирательная обработка данных

Временные и сеансовые окна

Временные окна

Временные окна

Нет (механизм «окон» отсутствует)

Нет (механизм «окон» отсутствует)

Поддерживаемые языки

Только JVM-языки (Scala, Java)

Scala, Java, R, Python

Scala, Java

Любые (благодаря Apache Thrift): Java, Scala, Python, C#, Ruby и пр.

Только JVM-языки (Scala, Java)

 

Что следует учитывать при выборе Big Data фреймворка потоковой обработки: 5 критичных факторов

Все критерии, отмеченные в вышеприведенной сравнительной таблице, можно разделить на 2 категории:

  • Функциональные характеристики, критичные с точки зрения прикладного использования:
    • задержка обработки данных (latency);
    • семантика доставки сообщений;
    • управление состоянием (stateful /stateless);
    • избирательная обработка данных;
    • источники и приемники информации.
  • Архитектурные особенности, которые обеспечивают реализацию критичных функциональных характеристик:
    • потоковые и вычислительные примитивы;
    • поддерживаемые подходы к обработке данных;
    • инструменты отказоустойчивости;
    • поддерживаемые языки программирования, API-интерфейсы, коннекторы и прочие средства разработки приложений.

Таким образом, когда требуется выбрать какое-то одно Big Data средство, следует внимательно учитывать достоинства и недостатки каждого инструмента, принимая во внимание самые важные характеристики, особенно значимые в каждом конкретном случае. Например, при жестких требованиях к минимальной задержке (low latency) не подойдет Apache Spark с его микро-пакетным подходом, а избирательную обработку данных в различных временных промежутках не поддерживают быстрые Storm и Samza. Также стоит учитывать источники и приемники данных, в частности, если предстоит обрабатывать информацию только из топиков Кафка, целесообразно выбрать Apache Kafka Streams или Samza, а при работе со множеством внешних Big Data хранилищ и баз данных следует рассмотреть Apache Spark, Flink или Storm.

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

Apache Kafka Streams, Spark Streaming, Flink, Storm, Samza, Big Data, сравнение потоковых фреймворков
Что выбрать для потоковой обработки Big Data: Apache Kafka Streams, Spark Streaming, Flink, Storm или Samza

Как выбрать и использовать в реальности наилучший распределенный фреймворк потоковой обработки данных, узнайте на наших практических курсах обучения и повышения квалификации в лицензированном учебном центре для ИТ-специалистов, руководителей, архитекторов, инженеров, администраторов, аналитиков Big Data и Data Scientist’ов в Москве:

расписание компьютерные курсы для руководителей, аналитиков, программистов, администраторов и пользователей Internet of Things, Big Data и Machine Learning Смотреть расписание занятий
регистрация на компьютерные курсы для руководителей, аналитиков, программистов, администраторов и пользователей Internet of Things, Big Data и Machine Learning Зарегистрироваться на курс