Лучшие вопросы
Таймлайн
Чат
Перспективы

Apache Flink

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

Apache Flink
Remove ads

Apache Flink — фреймворк с открытым исходным кодом для реализации обработки потоков, разработанный фондом Apache Software Foundation.

Краткие факты Разработчик, Написана на ...
Remove ads

В основу фреймворка положен движок для обработки процессов, написанный на языках Java и Scala[4][5]. Flink поддерживает программирование потоков данных как в параллельном режиме, так и в конвейерном режиме (pipeline)[6]. В конвейерном режиме (pipeline) Flink позволяет реализовать последовательность заданий (batch) и поток заданий (stream)[7][8]. Flink поддерживает также итерационные алгоритмы естественным образом[9].

Flink обладает высокой пропускной способностью и низкими задержками[10], потоки могут активизироваться от событий и сохранять статус. Задачи в системе Flink устойчивы к отказам и используют строго одну семантику[11]. Программы для фреймворка можно писать на языках Java, Scala[12], Python[13] и SQL[14], задания автоматически компилируются и оптимизируются[15], работая как в кластерах, так и в облачном сервере[16].

Flink не обладает собственной системой хранения данных, но использует источники данных и коннекторы типа Amazon Kinesis, Apache Kafka, Alluxio, HDFS, Apache Cassandra и ElasticSearch[17].

Remove ads

Разработка

Разработка Apache Flink проводилась в рамках лицензии Apache 2.0[18] сообществом Apache Flink в составе Apache Software Foundation. Проект вели 25 основных разработчиков и более 340 программистов-вкладчиков.

Первоначальные разработчики Apache Flink основали фирму Data Artisans, в которую вошли 12 основных разработчиков[19][20].

Обзор

Суммиров вкратце
Перспектива

Программирование потоков данных в Apache Flink опирается на обработку событий как для ограниченных во времени наборов данных, так и для непрерывных потоков без временных ограничений. На нижнем уровне программы в системе Flink разделяются на потоки (stream) и преобразования (transformation). Поток по своей концепции представляет собой очередь записей, которая может и никогда не заканчиваться. Преобразование — это операция, которая на входе получает один или несколько потоков, и потом преобразует данные также в один или несколько потоков[21].

В Apache Flink используется два основных API: DataStream API для ограниченных или неограниченных потоков, и DataSet API для ограниченных наборов данных. Flink также поддерживает Table API для таблиц, используя язык типа SQL как для потоков так и для заданий. На высшем уровне Flink поддерживает язык SQL, который семантически близок к Table API и осуществляет запросы через SQL.

Программная модель и распределённое исполнение задач

Во время выполнения программы для Flink ставятся в соответствие с потоками данных (streaming)[21]. Каждый поток берёт входные данные от одного или нескольких источников (например, ввод данных, очередь или файл), и завершается, посылая данные в один или несколько выходных потоков (очередь сообщений, файлы, база данных). В потоке проводится произвольное количество преобразования. Потоки образуют граф без циклов, позволяя приложению ветвится на многие потоки и объединять потоки вместе.

Flink предлагает соединять входные и выходные потоки с хранилищами Alluxio, Apache Kafka, Amazon Kinesis, HDFS, Apache Cassandra и др[17].

В распределённых системах программы Flink могут работать по кластерам или быть независимыми, используя также YARN, Mesos, или Docker для конфигурирования и распределения ресурсов[22].

Статусы: контрольные точки, точки сохранения, отказоустойчивость

Apache Flink включает облегчённый механизм отказоустойчивости с использованием распределённых контрольных точек[11]. Контрольная точка представляет собой автоматическое асинхронное сохранение (snapshot) статуса приложения в исходном потоке. В случае отказа программа в среде Flink с опцией контрольных точек производит восстановление процесса с момента последнего сохранения, при этом подразумевается что Flink оперирует с только одной семантикой статуса приложения. Механизм контрольных точек использует отметки (hook) в коде приложения, чтобы внешние системы могли подключить сохранение статуса в контрольных точкахl (подобно трансакциям при работе с базами данных).

Flink включает также механизм «точек сохранения» (savepoints), которые активируются вручную[23]. Пользователь может создать точку сохранения, остановить программу в среде Flink, а потом заново запустить её с той же позиции. Точки сохранения позволяют также проводить изменения в программе без потери статуса приложения. Начиная с версии of Flink 1.2, точки сохранения позволяют заново запустить приложение в ситуации параллельной обработки данных

DataStream API

DataStream API в системе Flink проводит преобразования — такие как фильтрацию, агрегацию, выборку — на ограниченных или неограниченных потоках данных. DataStream API включает в себя более 20 различных типов преобразования, которые могут быть использованы на языках Java и Scala[24].

Вот пример простой обработки потока для счётчика количества слов в непрерывном входном потоке по пятисекундным временным интервалам:

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time

case class WordCount(word: String, count: Int)

object WindowWordCount {
  def main(args: Array[String]) {

    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val text = env.socketTextStream("localhost", 9999)

    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
      .map { WordCount(_, 1) }
      .keyBy("word")
      .timeWindow(Time.seconds(5))
      .sum("count")

    counts.print

    env.execute("Window Stream WordCount")
  }
}

В данном потоке входной текст делится на слова с помощью операции flatMap, каждое слово преобразуется в структуру WordCount со счётчиком, равным единице, поток объектов WordCount группируется по словам и временным интервалам в 5 секунд, а потом суммируются по счётчикам, так что в итоговом потоке остаются счётчики слов для пятисекундных интервалов.

Apache Beam предлагает унифицированную модель программирования, позволяющую разработчику создавать задания в конвейерном и в потоковом режиме, а потом исполнять созданные задания в среде Flink[25]. Исполнитель Flink на базе Apache Beam содержит богатый набор возможностей[26].

В разработке исполнителя Flink работает фирма Data Artisans[27].

DataSet API

DataSet API в системе Flink поддерживает операции преобразования данных(такие как фильтрация, группирование, соответствие (mapping), объединение) с наборами данных, ограниченными во времени. DataSet API предлагает около 20 типов преобразований[28]. Это API поддерживается для языков Java и Scala, экспериментально также имеется API для языка Python. Концепция DataSet API сходна с концепцией DataStream API.

Table API и SQL

Table API — это язык выражений на языке типа SQL для обработки реляционных потоков и заданий, Table API входит как составная часть в DataSet и DataStream API для языков Java и Scala. Table API и соответствующий интерфейс SQL работают с абстрактным представлением реляционных таблиц. Абстрактные таблицы могут быть созданы из внешних данных, или из имеющихся потоков данных и наборов данных. Table API поддерживает реляционные операции — выборку, агрегацию, соединение.

При этом таблицы можно опрашивать и с помощью стандартного языка SQL. Table API и SQL предлагают одинаковые функции и могут смешиваться в одной и той же программе. Таблицы могут преобразовываться обратно в наборы данных или потоки данных, логические операции оптимизируются с помощью Apache Calcite и преобразуются в программы интерфейсов DataSet или DataStream[29].

Remove ads

Примечания

Ссылки

Loading content...
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads