Interested Article - Apache Flink

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

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

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

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

Разработка

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

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

Обзор

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

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

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

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

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

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

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

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

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

DataStream API

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

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

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

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

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

DataSet API

DataSet API в системе Flink поддерживает операции преобразования данных(такие как фильтрация, группирование, соответствие (mapping), объединение) с наборами данных, ограниченными во времени. DataSet API предлагает около 20 типов преобразований . Это 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 предлагают одинаковые функции и могут смешиваться в одной и той же программе. Таблицы могут преобразовываться обратно в наборы данных или потоки данных, логические операции оптимизируются с помощью и преобразуются в программы интерфейсов DataSet или DataStream .

Примечания

  1. — 2006.
  2. — 2023.
  3. (неопр.) . apache.org . Дата обращения: 7 февраля 2020. 26 декабря 2018 года.
  4. (неопр.) . GitHub . Дата обращения: 7 февраля 2020. 28 января 2019 года.
  5. Alexander Alexandrov, Rico Bergmann, Stephan Ewen, Johann-Christoph Freytag, Fabian Hueske, Arvid Heise, Odej Kao, Marcus Leich, Ulf Leser, Volker Markl, Felix Naumann, Mathias Peters, Astrid Rheinländer, Matthias J. Sax, Sebastian Schelter, Mareike Höger, Kostas Tzoumas, and Daniel Warneke. 2014. The Stratosphere platform for big data analytics . The VLDB Journal 23, 6 (December 2014), 939—964.
  6. Ian Pointer. (неопр.) . InfoWorld (7 мая 2015). Дата обращения: 7 февраля 2020. 23 октября 2018 года.
  7. (неопр.) odbms.org . Дата обращения: 7 февраля 2020. 23 октября 2018 года.
  8. Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann, and Volker Markl. 2012. Spinning fast iterative data flows . Proc. VLDB Endow. 5, 11 (July 2012), 1268—1279.
  9. . 1 мая 2017 года. Дата обращения: 7 февраля 2020.
  10. ↑ Carbone, Paris; Fóra, Gyula; Ewen, Stephan; Haridi, Seif & Tzoumas, Kostas (2015-06-29), Lightweight Asynchronous Snapshots for Distributed Dataflows, arΧiv : [cs.DC].
  11. (англ.) . ci.apache.org . Дата обращения: 23 февраля 2017. 21 января 2019 года.
  12. (англ.) . ci.apache.org . Дата обращения: 23 февраля 2017. 21 февраля 2017 года.
  13. (англ.) . ci.apache.org . Дата обращения: 23 февраля 2017. 18 мая 2019 года.
  14. Fabian Hueske, Mathias Peters, Matthias J. Sax, Astrid Rheinländer, Rico Bergmann, Aljoscha Krettek, and Kostas Tzoumas. 2012. Opening the black boxes in data flow optimization . Proc. VLDB Endow. 5, 11 (July 2012), 1256—1267.
  15. Daniel Warneke and Odej Kao. 2009. Nephele: efficient parallel data processing in the cloud . In Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers (MTAGS '09). ACM, New York, NY, USA, Article 8, 10 pages.
  16. ↑ (англ.) . ci.apache.org . Дата обращения: 23 февраля 2017. 21 февраля 2017 года.
  17. (неопр.) . apache.org . Дата обращения: 12 апреля 2015. Архивировано из 23 октября 2017 года.
  18. (англ.) . data-artisans.com . Дата обращения: 23 февраля 2017. Архивировано из 23 февраля 2017 года.
  19. (англ.) . flink.apache.org . Дата обращения: 23 февраля 2017. 21 февраля 2017 года.
  20. ↑ (англ.) . ci.apache.org . Дата обращения: 23 февраля 2017. 21 февраля 2017 года.
  21. (англ.) . ci.apache.org . Дата обращения: 24 февраля 2017. 21 февраля 2017 года.
  22. (англ.) . ci.apache.org . Дата обращения: 24 февраля 2017. 21 февраля 2017 года.
  23. (англ.) . ci.apache.org . Дата обращения: 24 февраля 2017. 21 января 2019 года.
  24. (англ.) . beam.apache.org . Дата обращения: 24 февраля 2017. 25 февраля 2017 года.
  25. (англ.) . beam.apache.org . Дата обращения: 24 февраля 2017. 25 февраля 2017 года.
  26. (англ.) . Google Cloud Platform . Дата обращения: 24 февраля 2017. 25 февраля 2017 года.
  27. (англ.) . ci.apache.org . Дата обращения: 24 февраля 2017. 21 января 2019 года.
  28. (англ.) . flink.apache.org . Дата обращения: 8 января 2020. 3 июля 2019 года.

Ссылки

  • — официальный сайт Apache Flink

Same as Apache Flink