Apache Flink - Apache Flink

Apache Flink
Логотип Apache Flink
Разработчики)Фонд программного обеспечения Apache
изначальный выпускМай 2011 г.; 9 лет назад (2011-05)
Стабильный выпуск
1.11.0 / 6 июля 2020 г.; 5 месяцев назад (2020-07-06)
РепозиторийРепозиторий Flink
Написано вЯва и Scala
Операционная системаКроссплатформенность
Тип
ЛицензияЛицензия Apache 2.0
Интернет сайтмигать.apache.org

Apache Flink является Открытый исходный код, унифицированный потоковая обработка и пакетная обработка рамки разработан Фонд программного обеспечения Apache. Ядро Apache Flink - это движок распределенной потоковой передачи данных, написанный на Ява и Scala.[1][2] Flink выполняет произвольное поток данных программы в параллельные данные и конвейерный (следовательно параллельная задача ) образом.[3] Конвейерная система времени выполнения Flink позволяет выполнять оптом / партия и программы потоковой обработки.[4][5] Кроме того, среда выполнения Flink поддерживает выполнение итерационные алгоритмы изначально.[6]

Flink предоставляет движок потоковой передачи с высокой пропускной способностью и малой задержкой.[7] а также поддержка обработки времени событий и управления состоянием. Приложения Flink отказоустойчивы в случае отказа машины и поддерживают семантику «ровно один раз».[8] Программы можно писать на Ява, Scala,[9] Python,[10] и SQL[11] и автоматически компилируются и оптимизируются[12] в программы потока данных, которые выполняются в кластере или облачной среде.[13]

Flink не предоставляет свою собственную систему хранения данных, но предоставляет соединители источников и приемников данных для таких систем, как Amazon Kinesis, Апач Кафка, Alluxio, HDFS, Apache Cassandra, и ElasticSearch.[14]

Разработка

Apache Flink разработан под Лицензия Apache 2.0[15] сообществом Apache Flink в рамках Фонд программного обеспечения Apache. В проекте участвуют более 25 коммиттеров и более 340 участников.

Ververica (ранее Data Artisans), компания, основанная первыми создателями Apache Flink,[16] использует многие из текущих коммиттеров Apache Flink.[17]

Обзор

Apache Flink's модель программирования потока данных обеспечивает одновременную обработку как конечных, так и бесконечных наборов данных. На базовом уровне программы Flink состоят из потоков и преобразований. «Концептуально поток - это (потенциально бесконечный) поток записей данных, а преобразование - это операция, которая принимает один или несколько потоков в качестве входных данных и в результате создает один или несколько выходных потоков».[18]

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

Модель программирования и распределенная среда выполнения

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

Flink предлагает готовые разъемы источника и приемника с Alluxio, Апач Кафка, Amazon Kinesis, HDFS, Apache Cassandra, и больше.[14]

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

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

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

Flink также включает механизм, называемый точками сохранения, которые запускаются вручную.[20] Пользователь может сгенерировать точку сохранения, остановить работающую программу Flink, а затем возобновить программу с того же состояния приложения и позиции в потоке. Точки сохранения позволяют обновлять программу Flink или кластер Flink без потери состояния приложения. Начиная с Flink 1.2, точки сохранения также позволяют перезапускать приложение с другим параллелизмом, что позволяет пользователям адаптироваться к изменяющимся рабочим нагрузкам.

DataStream API

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

Простым примером программы обработки потока с отслеживанием состояния является приложение, которое выдает счетчик слов из непрерывного входного потока и группирует данные в 5-секундных окнах:

импорт org.apache.flink.streaming.api.scala._импорт org.apache.flink.streaming.api.windowing.time.Timeдело учебный класс WordCount(слово: Нить, считать: Int)объект WindowWordCount {  def главный(аргументы: Множество[Нить]) {    вал env = StreamExecutionEnvironment.getExecutionEnvironment    вал текст = env.socketTextStream("localhost", 9999)    вал считает = текст.flatMap { _.toLowerCase.расколоть(" W +") фильтр { _.непустой } }      .карта { WordCount(_, 1) }      .keyBy("слово")      .timeWindow(Время.секунды(5))      .сумма("считать")    считает.Распечатать    env.выполнять("Window Stream WordCount")  }}

Apache Beam - Флинк-бегун

Apache Beam «Предоставляет расширенную унифицированную модель программирования, позволяющую (разработчику) реализовывать задания пакетной и потоковой обработки данных, которые могут выполняться на любом механизме выполнения».[22] Средство выполнения Apache Flink-on-Beam является наиболее многофункциональным согласно матрице возможностей, поддерживаемой сообществом Beam.[23]

Data Artisans совместно с сообществом Apache Flink тесно сотрудничали с сообществом Beam для разработки бегуна Flink.[24]

DataSet API

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

Табличный API и SQL

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

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

Флинк вперед

Flink Forward - это ежегодная конференция, посвященная Apache Flink. Первый выпуск Flink Forward прошел в 2015 году в Берлине. Двухдневная конференция собрала более 250 участников из 16 стран. Сессии были организованы в два трека с более чем 30 техническими презентациями от разработчиков Flink и одним дополнительным треком с практическим обучением Flink.

В 2016 году к конференции присоединились 350 участников, и более 40 спикеров представили технические доклады в 3 параллельных направлениях. На третий день участников пригласили принять участие в практических занятиях.

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

В 2020 году, после пандемии COVID-19, весеннее издание Flink Forward, которое должно было проходить в Сан-Франциско, было отменено. Вместо этого конференция проходила виртуально, начиная с 22 апреля и заканчивая 24 апреля, и на ней были представлены основные доклады в реальном времени, примеры использования Flink, внутреннее устройство Apache Flink и другие темы по потоковой обработке и аналитике в реальном времени.[27]

История

В 2010 году был проведен исследовательский проект «Стратосфера: управление информацией в облаке».[28] (финансируется Немецкий исследовательский фонд (DFG)[29]) был начат как сотрудничество Технический университет Берлина, Humboldt-Universität zu Berlin, и Hasso-Plattner-Institut Потсдам. Flink начался с форка механизма распределенного выполнения Stratosphere и стал Инкубатор Apache проект в марте 2014 года.[30] В декабре 2014 года Flink был принят в качестве проекта верхнего уровня Apache.[31][32][33][34]

ВерсияИсходная дата выпускаПоследняя версияДата выхода
Старая версия, больше не поддерживается: 0.92015-06-240.9.12015-09-01
Старая версия, больше не поддерживается: 0.102015-11-160.10.22016-02-11
Старая версия, больше не поддерживается: 1.02016-03-081.0.32016-05-11
Старая версия, больше не поддерживается: 1.12016-08-081.1.52017-03-22
Старая версия, больше не поддерживается: 1.22017-02-061.2.12017-04-26
Старая версия, больше не поддерживается: 1.32017-06-011.3.32018-03-15
Старая версия, больше не поддерживается: 1.42017-12-121.4.22018-03-08
Старая версия, больше не поддерживается: 1.52018-05-251.5.62018-12-26
Старая версия, больше не поддерживается: 1.62018-08-081.6.32018-12-22
Старая версия, больше не поддерживается: 1.72018-11-301.7.22019-02-15
Старая версия, больше не поддерживается: 1.82019-04-091.8.32019-12-11
Старая версия, но все еще поддерживается: 1.92019-08-221.9.22020-01-30
Текущая стабильная версия: 1.102020-02-111.10.02020-02-11

Даты выпуска

  • 02/2020: Apache Flink 1.10 (02/2020: v1.10.0)
  • 08/2019: Apache Flink 1.9 (10/2019: v1.9.1; 01/2020: v1.9.2)
  • 04/2019: Apache Flink 1.8 (07/2019: v1.8.1; 09/2019: v1.8.2; 12/2019: v1.8.3)
  • 11/2018: Apache Flink 1.7 (12/2018: v1.7.1; 02/2019: v1.7.2)
  • 08/2018: Apache Flink 1.6 (09/2018: v1.6.1; 10/2018: v1.6.2; 12/2018: v1.6.3)
  • 05/2018: Apache Flink 1.5 (07/2018: v1.5.1; 07/2018: v1.5.2; 08/2018: v1.5.3; 09/2018: v1.5.4; 10/2018: v1.5.5; 12 / 2018: v1.5.6)
  • 12/2017: Apache Flink 1.4 (02/2018: v1.4.1; 03/2018: v1.4.2)
  • 06/2017: Apache Flink 1.3 (06/2017: v1.3.1; 08/2017: v1.3.2; 03/2018: v1.3.3)
  • 02/2017: Apache Flink 1.2 (04/2017: v1.2.1)
  • 08/2016: Apache Flink 1.1 (08/2016: v1.1.1; 09/2016: v1.1.2; 10/2016: v1.1.3; 12/2016: v1.1.4; 03/2017: v1.1.5)
  • 03/2016: Apache Flink 1.0 (04/2016: v1.0.1; 04/2016: v1.0.2; 05/2016: v1.0.3)
  • 11/2015: Apache Flink 0.10 (11/2015: v0.10.1; 02/2016: v0.10.2)
  • 06/2015: Apache Flink 0.9 (09/2015: v0.9.1)
    • 04/2015: Apache Flink 0.9-веха-1

Даты выпуска инкубатора Apache

  • 01/2015: инкубация Apache Flink 0.8
  • 11/2014: инкубация Apache Flink 0.7
  • 08/2014: инкубация Apache Flink 0.6 (09/2014: инкубация v0.6.1)
  • 05/2014: Stratosphere 0.5 (06/2014: v0.5.1; 07/2014: v0.5.2)

Даты выхода Pre-Apache Stratosphere

  • 01/2014: Stratosphere 0.4 (версия 0.3 пропущена)
  • 08/2012: Стратосфера 0.2
  • 05/2011: Stratosphere 0.1 (08/2011: v0.1.1)

Смотрите также

Рекомендации

  1. ^ «Apache Flink: масштабируемая пакетная и потоковая обработка данных». apache.org.
  2. ^ "apache / flink". GitHub.
  3. ^ Александр Александров, Рико Бергманн, Стефан Эвен, Иоганн-Кристоф Фрейтаг, Фабиан Хуэске, Арвид Хейсе, Одей Као, Маркус Лейх, Ульф Лезер, Фолькер Маркл, Феликс Науман, Матиас Петерс, Астрид Райнлендер, Матиас Дж. Сакс, Себастиан Шеландер Хёгер, Костас Тзумас и Даниэль Варнеке. 2014 г. Платформа Stratosphere для анализа больших данных. Журнал VLDB 23, 6 (декабрь 2014 г.), 939-964. DOI
  4. ^ Иэн Пойнтер (7 мая 2015 г.). "Apache Flink: новый претендент на Hadoop противостоит Spark". InfoWorld.
  5. ^ «На Apache Flink. Интервью с Фолькером Маркл». odbms.org.
  6. ^ Стефан Эвен, Костас Цумас, Мориц Кауфманн и Фолькер Маркл. 2012 г. Вращение быстрых итеративных потоков данных. Proc. VLDB Endow. 5, 11 (июль 2012 г.), 1268-1279. DOI
  7. ^ «Сравнительный анализ механизмов потоковых вычислений в Yahoo!». Yahoo Engineering. Получено 2017-02-23.
  8. ^ а б Карбоне, Париж; Фора, Дьюла; Юэн, Стефан; Хариди, Сейф; Тзумас, Костас (2015-06-29). «Легкие асинхронные снимки для распределенных потоков данных». arXiv:1506.08603 [cs.DC ].
  9. ^ «Документация Apache Flink 1.2.0: Руководство по программированию API Flink DataStream». ci.apache.org. Получено 2017-02-23.
  10. ^ «Документация Apache Flink 1.2.0: Руководство по программированию на Python». ci.apache.org. Получено 2017-02-23.
  11. ^ «Документация Apache Flink 1.2.0: таблица и SQL». ci.apache.org. Получено 2017-02-23.
  12. ^ Фабиан Хуэске, Матиас Петерс, Матиас Дж. Сакс, Астрид Райнландер, Рико Бергманн, Алйоша Креттек и Костас Тзумас. 2012 г. Открытие черных ящиков в оптимизации потока данных. Proc. VLDB Endow. 5, 11 (июль 2012 г.), 1256-1267. DOI
  13. ^ Даниэль Варнеке и Одей Као. 2009 г. Nephele: эффективная параллельная обработка данных в облаке. В материалах 2-го семинара по многозадачным вычислениям в сетях и суперкомпьютерах (MTAGS '09). ACM, Нью-Йорк, Нью-Йорк, США, статья 8, 10 страниц. DOI
  14. ^ а б «Документация Apache Flink 1.2.0: соединители потоковой передачи». ci.apache.org. Получено 2017-02-23.
  15. ^ "ASF Git Repos - flink.git / blob - ЛИЦЕНЗИЯ". apache.org. Архивировано из оригинал на 2017-10-23. Получено 2015-04-12.
  16. ^ "О - Верверика". ververica.com. Получено 2020-03-18.
  17. ^ «Apache Flink: информация о сообществе и проекте». flink.apache.org. Получено 2017-02-23.
  18. ^ а б «Документация Apache Flink 1.2.0: модель программирования потока данных». ci.apache.org. Получено 2017-02-23.
  19. ^ «Документация Apache Flink 1.2.0: Распределенная среда выполнения». ci.apache.org. Получено 2017-02-24.
  20. ^ «Документация Apache Flink 1.2.0: Распределенная среда выполнения - точки сохранения». ci.apache.org. Получено 2017-02-24.
  21. ^ «Документация Apache Flink 1.2.0: Руководство по программированию API Flink DataStream». ci.apache.org. Получено 2017-02-24.
  22. ^ "Apache Beam". beam.apache.org. Получено 2017-02-24.
  23. ^ «Матрица возможностей Apache Beam». beam.apache.org. Получено 2017-02-24.
  24. ^ "Почему Apache Beam? Взгляд Google | Блог Google Cloud по большим данным и машинному обучению | Google Cloud Platform". Облачная платформа Google. Получено 2017-02-24.
  25. ^ «Документация Apache Flink 1.2.0: Руководство по программированию Flink DataSet API». ci.apache.org. Получено 2017-02-24.
  26. ^ «Потоковая обработка для всех с SQL и Apache Flink». flink.apache.org. Получено 2020-01-08.
  27. ^ «Виртуальная конференция Flink Forward 2020».
  28. ^ "Стратосфера". stratosphere.eu.
  29. ^ "DFG - Deutsche Forschungsgemeinschaft -". dfg.de.
  30. ^ "Стратосфера". apache.org.
  31. ^ «Детали проекта для Apache Flink». apache.org.
  32. ^ «Apache Software Foundation объявляет Apache ™ Flink ™ проектом высшего уровня: блог Apache Software Foundation». apache.org.
  33. ^ «Сможет ли таинственный Апач Флинк найти золотую середину на предприятии?». Siliconangle.com.
  34. ^ (на немецком)

внешняя ссылка