Hadoop, Storm, Samza, Spark и Flink: Сравнение платформ больших данных

Вступление

  • Большие данные * - это общий термин для обозначения нетрадиционных стратегий и технологий, необходимых для сбора, организации, обработки и сбора информации из больших наборов данных. Хотя проблема работы с данными, которые превышают вычислительную мощность или объем хранилища одного компьютера, не нова, распространенность, масштаб и ценность этого типа вычислений в последние годы значительно расширились.

В предыдущем руководстве мы обсудили некоторые общие понятия https://www.digitalocean.com/community/tutorials/an-introduction-to-big-data-concepts-and-terminology, этапы обработки и терминологию системы больших данных. В этой статье мы рассмотрим один из наиболее важных компонентов большой системы данных: платформы обработки. Платформы обработки вычисляют данные в системе, считывая данные из энергонезависимого хранилища или по мере их поступления в систему. Вычисление данных - это процесс извлечения информации и анализа из большого количества отдельных точек данных.

Мы рассмотрим следующие рамки:

  • * Пакетные рамки: *

  • * ссылка: # apache-hadoop [Apache Hadoop] *

  • * Потоковые рамки: *

  • * ссылка: # apache-storm [Apache Storm] *

  • * ссылка: # apache-samza [Apache Samza] *

  • * Гибридные рамки: *

  • * ссылка: # apache-spark [Apache Spark] *

  • * ссылка: # apache-flink [Apache Flink] *

Что такое фреймворки для обработки больших данных?

  • Фреймворки обработки * и * механизмы обработки * отвечают за вычисления данных в системе данных. Хотя нет авторитетного определения, отделяющего «движки» от «каркасов», иногда полезно определить первый как фактический компонент, отвечающий за работу с данными, а второй - как набор компонентов, предназначенных для того же.

Например, * Apache Hadoop * можно рассматривать как обработающую инфраструктуру с * MapReduce * в качестве процессорного механизма по умолчанию. Двигатели и каркасы часто можно заменить или использовать в тандеме. Например, * Apache Spark *, другой фреймворк, может подключиться к Hadoop, чтобы заменить MapReduce. Эта совместимость между компонентами является одной из причин того, что большие системы данных обладают большой гибкостью.

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

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

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

Системы пакетной обработки

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

Наборы данных в пакетной обработке, как правило, …​

  • bounded: пакетные наборы данных представляют собой конечный набор данных

  • постоянный: данные почти всегда поддерживаются каким-либо постоянным хранилищем

  • большие: пакетные операции часто являются единственным вариантом для обработки чрезвычайно больших наборов данных

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

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

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

Apache Hadoop

Apache Hadoop - это среда обработки, которая обеспечивает исключительно пакетную обработку. Hadoop был первой структурой больших данных, получившей значительную популярность в сообществе открытого кода. Основываясь на нескольких статьях и презентациях Google о том, как они в то время работали с огромными объемами данных, Hadoop повторно реализовал алгоритмы и стек компонентов, чтобы сделать крупномасштабную пакетную обработку более доступной.

Современные версии Hadoop состоят из нескольких компонентов или слоев, которые работают вместе для обработки пакетных данных:

  • * HDFS *: HDFS - это уровень распределенной файловой системы, который координирует хранение и репликацию между узлами кластера. HDFS гарантирует, что данные остаются доступными, несмотря на неизбежные сбои хоста. Он используется в качестве источника данных для хранения промежуточных результатов обработки и сохранения окончательных результатов вычислений.

  • * YARN *: YARN, что означает еще один согласователь ресурсов, является компонентом координации кластера стека Hadoop. Он отвечает за координацию и управление базовыми ресурсами и планирование заданий для запуска. YARN позволяет выполнять на кластере Hadoop гораздо более разнообразные рабочие нагрузки, чем это было возможно на более ранних итерациях, выступая в качестве интерфейса с ресурсами кластера.

  • * MapReduce *: MapReduce - это собственный движок пакетной обработки Hadoop.

Модель пакетной обработки

Функциональность обработки Hadoop происходит от движка MapReduce. Техника обработки MapReduce следует алгоритму преобразования, перемешивания и сокращения с использованием пар ключ-значение. Основная процедура включает в себя:

  • Чтение набора данных из файловой системы HDFS

  • Разделение набора данных на куски и распределение по доступным узлам

  • Применение вычислений на каждом узле к подмножеству данных (промежуточные результаты записываются обратно в HDFS)

  • Перераспределение промежуточных результатов по группам по ключу

  • «Уменьшение» значения каждого ключа путем суммирования и объединения результатов, рассчитанных отдельными узлами

  • Запишите рассчитанные окончательные результаты обратно в HDFS

Преимущества и ограничения

Поскольку эта методология в значительной степени использует постоянное хранение, чтение и запись несколько раз на одну задачу, она имеет тенденцию быть довольно медленной. С другой стороны, поскольку дисковое пространство обычно является одним из наиболее распространенных серверных ресурсов, это означает, что MapReduce может обрабатывать огромные наборы данных. Это также означает, что MapReduce Hadoop обычно может работать на менее дорогом оборудовании, чем некоторые альтернативы, поскольку он не пытается хранить все в памяти. MapReduce обладает невероятным потенциалом масштабируемости и используется в производстве на десятках тысяч узлов.

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

Hadoop имеет обширную экосистему, причем сам кластер Hadoop часто используется в качестве строительного блока для другого программного обеспечения. Многие другие среды обработки и механизмы имеют интеграцию Hadoop для использования HDFS и менеджера ресурсов YARN.

Резюме

Apache Hadoop и его механизм обработки MapReduce предлагают хорошо протестированную модель пакетной обработки, которая лучше всего подходит для обработки очень больших наборов данных, когда время не является существенным фактором. Низкая стоимость компонентов, необходимых для хорошо функционирующего кластера Hadoop, делает эту обработку недорогой и эффективной для многих случаев использования. Совместимость и интеграция с другими платформами и механизмами означает, что Hadoop часто может служить основой для множества рабочих нагрузок обработки с использованием разнообразных технологий.

Системы потоковой обработки

  • Потоковая обработка * Системы вычисляют данные по мере их поступления в систему. Это требует другой модели обработки, чем парадигма пакета. Вместо определения операций, применяемых ко всему набору данных, потоковые процессоры определяют операции, которые будут применяться к каждому отдельному элементу данных при его прохождении через систему.

Наборы данных при обработке потока считаются «неограниченными». Это имеет несколько важных последствий:

  • Набор данных total определяется только как объем данных, поступивших в систему на данный момент.

  • Набор данных working, возможно, более актуален и ограничен одним элементом за раз.

  • Обработка основана на событиях и не заканчивается до тех пор, пока не будет явно остановлена. Результаты сразу же доступны и будут постоянно обновляться по мере поступления новых данных.

Системы потоковой обработки могут обрабатывать практически неограниченный объем данных, но одновременно обрабатывают только один (обработка истинного потока) или очень мало (микро-пакетная обработка) элементов с минимальным состоянием между записями. В то время как большинство систем предоставляют методы для поддержания некоторого состояния, обработка паром высоко оптимизирована для более «функциональной» обработки с небольшим количеством побочных эффектов.

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

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

Apache Storm

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

Модель потоковой обработки

Обработка штормового потока выполняется путем организации DAG (направленных ациклических графов) в рамках, называемых * топологиями *. Эти топологии описывают различные преобразования или шаги, которые будут предприняты для каждого входящего фрагмента данных при его поступлении в систему.

Топологии состоят из:

  • * Streams *: обычные потоки данных. Это неограниченные данные, которые постоянно поступают в систему.

  • * Носики *: источники потоков данных на границе топологии. Это могут быть API, очереди и т. Д. которые производят данные для обработки.

  • * Болты *: Болты представляют собой этап обработки, который потребляет потоки, применяет к ним операцию и выводит результат в виде потока. Болты соединяются с каждым из носиков, а затем соединяются друг с другом, чтобы организовать всю необходимую обработку. В конце топологии конечный вывод болта может использоваться как вход для подключенной системы.

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

Для достижения точной однократной обработки с сохранением состояния также доступна абстракция под названием * Trident *. Чтобы быть явным, Storm без Trident часто упоминается как * Core Storm *. Trident значительно изменяет динамику обработки Storm, увеличивая задержку, добавляя состояние к обработке и внедряя модель микропакетирования вместо поэлементной системы потоковой передачи.

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

Топологии Trident состоят из:

  • * Потоковые пакеты *: это микропакеты потоковых данных, которые разделяются на части для обеспечения семантики пакетной обработки.

  • * Операции *: это пакетные процедуры, которые можно выполнить с данными.

Преимущества и ограничения

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

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

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

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

Резюме

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

Apache Samza

Apache Samza - это среда потоковой обработки, тесно связанная с системой обмена сообщениями Apache Kafka. В то время как Kafka может использоваться многими системами потоковой обработки, Samza разработан специально для использования уникальной архитектуры и гарантий Kafka. Он использует Kafka для обеспечения отказоустойчивости, буферизации и хранения состояния.

Самза использует YARN для согласования ресурсов. Это означает, что по умолчанию требуется кластер Hadoop (по крайней мере, HDFS и YARN), но это также означает, что Samza может полагаться на богатые функции, встроенные в YARN.

Модель потоковой обработки

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

  • * Темы *: Каждый поток данных, поступающих в систему Kafka, называется темой. Тема - это поток информации, на которую могут подписаться потребители.

  • * Разделы *: Чтобы распределить тему по узлам, Кафка делит входящие сообщения на разделы. Разделение на разделы основано на ключе, так что каждое сообщение с одинаковым ключом гарантированно будет отправлено в один и тот же раздел. Перегородки имеют гарантированный заказ.

  • * Брокеры *: отдельные узлы, которые составляют кластер Kafka, называются брокерами.

  • * Producer *: любой компонент, пишущий на тему Kafka, называется производителем. Производитель предоставляет ключ, который используется для разделения темы.

  • * Потребители *: Потребители - это любой компонент, который читает тему Кафки. Потребители несут ответственность за ведение информации о собственном смещении, чтобы они знали, какие записи были обработаны в случае сбоя.

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

Преимущества и ограничения

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

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

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

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

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

Samza может сохранять состояние, используя отказоустойчивую систему контрольных точек, реализованную как локальное хранилище значений ключей. Это позволяет Samza предлагать гарантированную доставку хотя бы один раз, но не обеспечивает точного восстановления агрегированного состояния (например, количества) в случае сбоя, поскольку данные могут быть доставлены более одного раза.

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

Резюме

Apache Samza - хороший выбор для потоковых рабочих нагрузок, когда Hadoop и Kafka уже доступны или целесообразны для реализации. Самза подходит для организаций с несколькими командами, которые используют (но не обязательно тесно координируют) потоки данных на разных этапах обработки. Samza значительно упрощает многие части обработки потоков и обеспечивает низкую задержку. Это может не подходить, если требования к развертыванию несовместимы с вашей текущей системой, если вам требуется обработка с чрезвычайно низкой задержкой или если у вас есть сильная потребность в семантике с ровно однократной обработкой.

Гибридные системы обработки: пакетные и потоковые процессоры

Некоторые платформы обработки могут обрабатывать как пакетные, так и потоковые рабочие нагрузки. Эти структуры упрощают различные требования к обработке, позволяя использовать одинаковые или связанные компоненты и API для обоих типов данных.

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

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

Apache Spark

Apache Spark - это инфраструктура пакетной обработки следующего поколения с возможностями потоковой обработки. Созданный с использованием многих из тех же принципов движка MapReduce, что и Hadoop, Spark в первую очередь фокусируется на ускорении рабочих нагрузок пакетной обработки, предлагая полную оптимизацию вычислений в памяти и обработки.

Spark может быть развернут как отдельный кластер (если он связан с подходящим уровнем хранения) или может подключиться к Hadoop в качестве альтернативы движку MapReduce.

Модель пакетной обработки

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

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

Для реализации пакетных вычислений в памяти Spark использует модель, называемую Resilient Distributed Datasets, или * RDDs *, для работы с данными. Это неизменные структуры, которые существуют в памяти и представляют собой коллекции данных. Операции над СДР производят новые СДР. Каждый RDD может проследить свою родословную через свои родительские RDD и, в конечном счете, до данных на диске. По сути, RDD позволяют Spark поддерживать отказоустойчивость без необходимости обратной записи на диск после каждой операции.

Модель потоковой обработки

Возможности потоковой обработки предоставляются Spark Streaming. Сам Spark разработан с учетом ориентированных на пакет рабочих нагрузок. Чтобы справиться с несоответствием между дизайном двигателя и характеристиками потоковых рабочих нагрузок, Spark реализует концепцию, называемую micro-batches *. Эта стратегия предназначена для обработки потоков данных как серии очень маленьких пакетов, которые могут обрабатываться с использованием собственной семантики пакетного механизма.

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

Преимущества и ограничения

Очевидная причина использования Spark поверх Hadoop MapReduce - скорость. Spark может обрабатывать одни и те же наборы данных значительно быстрее благодаря своей стратегии вычислений в памяти и расширенному планированию DAG.

Еще одно из главных преимуществ Spark - это универсальность. Он может быть развернут как автономный кластер или интегрирован с существующим кластером Hadoop. Он может выполнять как пакетную, так и потоковую обработку, позволяя управлять одним кластером для обработки нескольких стилей обработки.

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

Адаптация методологии пакетной обработки для потоковой обработки включает буферизацию данных при их поступлении в систему. Буфер позволяет обрабатывать большой объем входящих данных, увеличивая общую пропускную способность, но ожидание очистки буфера также приводит к значительному увеличению задержки. Это означает, что Spark Streaming может не подходить для обработки, где низкая задержка обязательна.

Поскольку ОЗУ обычно дороже дискового пространства, Spark может стоить дороже, чем дисковые системы. Однако повышенная скорость обработки означает, что задачи могут выполняться гораздо быстрее, что может полностью компенсировать затраты при работе в среде, где вы платите за ресурсы ежечасно.

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

Резюме

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

Апач флинк

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

Этот подход, основанный на потоке, был назван * архитектурой Kappa *, в отличие от более широко известной архитектуры Lambda (где пакетная обработка используется в качестве основного метода обработки с потоками, используемыми для дополнения и предоставления ранних, но неопределяемых результатов). Архитектура Kappa, где потоки используются для всего, упрощает модель и стала возможной лишь недавно, поскольку механизмы обработки потоков стали более изощренными.

Модель потоковой обработки

Модель потоковой обработки Flink обрабатывает поступающие данные по каждому элементу как истинный поток. Flink предоставляет свой DataStream API для работы с неограниченными потоками данных. Основные компоненты, с которыми работает Flink:

  • * Потоки * являются неизменными, неограниченными наборами данных, которые проходят через систему

  • * Операторы * - это функции, которые работают с потоками данных для создания других потоков.

  • * Источники * являются точкой входа для потоков, входящих в систему

  • * Sinks * - это место, где потоки вытекают из системы Flink. Они могут представлять базу данных или соединитель с другой системой

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

Кроме того, потоковая обработка Flink способна понять концепцию «времени события», то есть времени, когда событие действительно произошло, и также может обрабатывать сеансы. Это означает, что он может гарантировать упорядочение и группировку несколькими интересными способами.

Модель пакетной обработки

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

Flink предлагает некоторые оптимизации для пакетных рабочих нагрузок. Например, поскольку пакетные операции поддерживаются постоянным хранилищем, Flink удаляет моментальные снимки из пакетных загрузок. Данные все еще восстанавливаемы, но нормальная обработка завершается быстрее.

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

Преимущества и ограничения

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

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

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

С точки зрения пользовательского инструментария Flink предлагает веб-интерфейс планирования, чтобы легко управлять задачами и просматривать систему. Пользователи также могут отобразить план оптимизации для представленных задач, чтобы увидеть, как он будет фактически реализован в кластере. Для задач анализа Flink предлагает библиотеки запросов в стиле SQL, библиотеки обработки графиков и машинного обучения, а также вычисления в памяти.

Flink хорошо работает с другими компонентами. Он написан, чтобы быть хорошим соседом, если используется в стеке Hadoop, занимая только необходимые ресурсы в любой момент времени. Он легко интегрируется с YARN, HDFS и Kafka. Flink может выполнять задачи, написанные для других сред обработки, таких как Hadoop и Storm, с помощью пакетов совместимости.

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

Резюме

Flink предлагает как потоковую обработку с низкой задержкой, так и поддержку традиционных пакетных задач. Flink, вероятно, лучше всего подходит для организаций, которые предъявляют высокие требования к обработке потоков и некоторым пакетным задачам. Его совместимость с собственными программами Storm и Hadoop, а также способность работать в кластере, управляемом YARN, позволяют легко оценить. Его быстрое развитие делает его достойным внимания.

Заключение

Существует множество вариантов обработки в большой системе данных.

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

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

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

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

Related