Loading AI tools
платформа и механизм распределенной обработки для вычислений с отслеживанием состояния в неограниченных и ограниченных потоках данных Из Википедии, свободной энциклопедии
Apache Flink — фреймворк с открытым исходным кодом для реализации обработки потоков, разработанный фондом Apache Software Foundation.
Apache Flink | |
---|---|
Разработчик | Apache Software Foundation |
Написана на | Java[1][2] и Scala[2] |
Первый выпуск | 6 января 2015[2] |
Аппаратная платформа | Java Virtual Machine |
Последняя версия | |
Репозиторий | github.com/apache/flink |
Лицензия | Apache License 2.0 |
Сайт | flink.apache.org |
Медиафайлы на Викискладе |
В основу фреймворка положен движок для обработки процессов, написанный на языках 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].
Разработка 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 в системе 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 в системе Flink поддерживает операции преобразования данных(такие как фильтрация, группирование, соответствие (mapping), объединение) с наборами данных, ограниченными во времени. DataSet API предлагает около 20 типов преобразований[28]. Это API поддерживается для языков Java и Scala, экспериментально также имеется API для языка Python. Концепция DataSet API сходна с концепцией DataStream API.
Table API — это язык выражений на языке типа SQL для обработки реляционных потоков и заданий, Table API входит как составная часть в DataSet и DataStream API для языков Java и Scala. Table API и соответствующий интерфейс SQL работают с абстрактным представлением реляционных таблиц. Абстрактные таблицы могут быть созданы из внешних данных, или из имеющихся потоков данных и наборов данных. Table API поддерживает реляционные операции — выборку, агрегацию, соединение.
При этом таблицы можно опрашивать и с помощью стандартного языка SQL. Table API и SQL предлагают одинаковые функции и могут смешиваться в одной и той же программе. Таблицы могут преобразовываться обратно в наборы данных или потоки данных, логические операции оптимизируются с помощью Apache Calcite и преобразуются в программы интерфейсов DataSet или DataStream[29].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.