Apache Flink — это унифицированная среда потоковой и пакетной обработки с открытым исходным кодом , разработанная Apache Software Foundation . Ядром Apache Flink является распределенный потоковый движок потока данных, написанный на Java и Scala . [3] [4] Flink выполняет произвольные программы потоков данных в параллельной по данным и конвейерной (следовательно, параллельной задачам ) манере. [5] Конвейерная система времени выполнения Flink позволяет выполнять программы пакетной и потоковой обработки. [6] [7] Кроме того, среда выполнения Flink изначально поддерживает выполнение итеративных алгоритмов . [8]
Flink обеспечивает высокопроизводительный потоковый движок с низкой задержкой [9] , а также поддержку обработки событий и управления состоянием. Приложения Flink устойчивы к отказам в случае сбоя машины и поддерживают семантику exact-once. [10] Программы могут быть написаны на Java , Scala , [11] Python , [12] и SQL [13] и автоматически компилируются и оптимизируются [14] в программы потоков данных, которые выполняются в кластерной или облачной среде. [15]
Flink не предоставляет собственную систему хранения данных, но предоставляет коннекторы источников и приемников данных для таких систем, как Apache Doris, Amazon Kinesis , Apache Kafka , HDFS , Apache Cassandra и ElasticSearch . [16]
Apache Flink разработан под лицензией Apache License 2.0 [17] сообществом Apache Flink в рамках Apache Software Foundation . Проект поддерживается более чем 25 коммиттерами и более чем 340 участниками.
Модель программирования потока данных Apache Flink обеспечивает обработку событий за раз как на конечных, так и на бесконечных наборах данных. На базовом уровне программы Flink состоят из потоков и преобразований. «Концептуально поток — это (потенциально бесконечный) поток записей данных, а преобразование — это операция, которая принимает один или несколько потоков в качестве входных данных и производит один или несколько выходных потоков в качестве результата». [18]
Apache Flink включает два основных API: API DataStream для ограниченных или неограниченных потоков данных и API DataSet для ограниченных наборов данных. Flink также предлагает API таблиц, представляющий собой язык выражений SQL для реляционной потоковой и пакетной обработки, который можно легко встроить в API DataStream и DataSet Flink. Языком самого высокого уровня, поддерживаемым Flink, является SQL, который семантически похож на API таблиц и представляет программы как выражения запросов SQL.
После выполнения программы Flink сопоставляются с потоковыми потоками данных . [18] Каждый поток данных Flink начинается с одного или нескольких источников (вход данных, например, очередь сообщений или файловая система) и заканчивается одним или несколькими приемниками (выход данных, например, очередь сообщений, файловая система или база данных). В потоке может быть выполнено произвольное количество преобразований. Эти потоки могут быть организованы как направленный ациклический граф потоков данных, что позволяет приложению разветвлять и объединять потоки данных.
Flink предлагает готовые соединители источника и приемника с Apache Kafka , Amazon Kinesis, [19] HDFS , Apache Cassandra и другими. [16]
Программы Flink работают как распределенная система в кластере и могут быть развернуты в автономном режиме, а также в установках на основе YARN, Mesos, Docker вместе с другими фреймворками управления ресурсами. [20]
Apache Flink включает в себя легкий механизм отказоустойчивости, основанный на распределенных контрольных точках. [10] Контрольная точка — это автоматический асинхронный снимок состояния приложения и положения в исходном потоке. В случае сбоя программа Flink с включенной контрольной точкой после восстановления возобновит обработку с последней завершенной контрольной точки, гарантируя, что Flink поддерживает семантику состояния exact-only в приложении. Механизм контрольных точек предоставляет хуки для кода приложения, чтобы также включать внешние системы в механизм контрольных точек (например, открытие и фиксация транзакций с системой базы данных).
Flink также включает механизм, называемый точками сохранения, которые являются вручную активируемыми контрольными точками. [21] Пользователь может создать точку сохранения, остановить запущенную программу Flink, а затем возобновить программу из того же состояния приложения и позиции в потоке. Точки сохранения позволяют обновлять программу Flink или кластер Flink без потери состояния приложения. Начиная с Flink 1.2, точки сохранения также позволяют перезапускать приложение с другим параллелизмом, что позволяет пользователям адаптироваться к изменяющимся рабочим нагрузкам.
API DataStream от Flink позволяет выполнять преобразования (например, фильтры, агрегации, оконные функции) в ограниченных или неограниченных потоках данных. API DataStream включает более 20 различных типов преобразований и доступен в Java и Scala. [22]
Простым примером программы потоковой обработки с отслеживанием состояния является приложение, которое выдает количество слов из непрерывного входного потока и группирует данные в 5-секундные окна:
импорт org.apache.flink.streaming.api.scala._ импорт org.apache.flink.streaming.api.windowing.time.Time класс случая WordCount ( слово : Строка , количество : Целое ) объект WindowWordCount { def main ( args : Array [ String ]) { значение env = StreamExecutionEnvironment . getExecutionEnvironment значение 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 " ) подсчеты . печать env . execute ( "Окно Поток WordCount" ) } }
Apache Beam «предоставляет усовершенствованную унифицированную модель программирования, позволяющую (разработчику) реализовывать задания по пакетной и потоковой обработке данных, которые могут выполняться на любом движке выполнения». [23] Исполнитель Apache Flink-on-Beam является наиболее многофункциональным согласно матрице возможностей, поддерживаемой сообществом Beam. [24]
Data Artisans совместно с сообществом Apache Flink тесно сотрудничали с сообществом Beam для разработки Flink runner. [25]
API DataSet от Flink позволяет выполнять преобразования (например, фильтры, сопоставление, объединение, группировку) в ограниченных наборах данных. API DataSet включает более 20 различных типов преобразований. [26] API доступен в Java, Scala и экспериментальном API Python. API DataSet от Flink концептуально похож на API DataStream.
API таблиц Flink — это SQL-подобный язык выражений для реляционной потоковой и пакетной обработки, который может быть встроен в API наборов данных и потоков данных Flink Java и Scala. API таблиц и интерфейс SQL работают на реляционной абстракции таблиц. Таблицы можно создавать из внешних источников данных или из существующих потоков данных и наборов данных. API таблиц поддерживает реляционные операторы, такие как выборка, агрегация и объединения таблиц.
Таблицы также можно запрашивать с помощью обычного SQL. API таблиц и SQL предлагают эквивалентную функциональность и могут быть смешаны в одной программе. Когда таблица преобразуется обратно в DataSet или DataStream, логический план, который был определен реляционными операторами и запросами SQL, оптимизируется с помощью Apache Calcite и преобразуется в программу DataSet или DataStream. [27]
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 и другими темами по потоковой обработке и аналитике в реальном времени. [28]
В 2010 году исследовательский проект «Стратосфера: управление информацией в облаке» [29] под руководством Фолькера Маркла (финансируемый Немецким исследовательским фондом (DFG) ) [30] был начат как сотрудничество Технического университета Берлина , Университета Гумбольдта в Берлине и Института Хассо-Платтнера в Потсдаме. Flink начинался как ответвление распределенного исполняющего движка Stratosphere и стал проектом Apache Incubator в марте 2014 года . [31] В декабре 2014 года Flink был принят в качестве проекта Apache верхнего уровня. [32] [33] [34] [35]
Даты выпуска
Даты выпуска Apache Incubator
Даты выпуска до Apache Stratosphere
Релизы 1.14.1, 1.13.4, 1.12.6, 1.11.5, которые должны были содержать только обновление Log4j до 2.15.0, были пропущены, поскольку во время публикации релиза была обнаружена уязвимость CVE-2021-45046. [36]