# Apache Flink

{% hint style="info" %}
**Apache Flink** — это платформа распределенной обработки данных с возможностью отслеживания состояния в потоке.
{% endhint %}

## Архитектура и принципы работы

Входные данные каждого потока Флинк берутся с одного или нескольких источников, например, из очереди сообщений Apache Kafka, СУБД HBase или файловой системы Hadoop HDFS, отправляясь в один или несколько приемников (очередь сообщений, файловую систему или базу данных). В потоке может быть выполнено произвольное число преобразований. Эти потоки могут быть организованы как ориентированный ациклический граф, позволяющий приложению распределять и объединять потоки данных. Помимо потоковой обработки Big Data в рамках DataStream API, Flink также позволяет работать.

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

При развертывании приложения Flink автоматически идентифицирует требуемые ресурсы на основе настроенного параллелизма приложения и запрашивает их из системы управления кластером. В случае сбоя Flink заменяет контейнер, запрашивая новые ресурсы. Отправка и управление приложением происходит через REST. Это облегчает интеграцию Flink в различных средах.

## Преимущества

* **высокая производительность** — приложения Флинк могут распараллеливаться в тысячи задач, которые распределяются и выполняются в кластере одновременно, используя практически неограниченное количество процессоров, основной памяти, дискового и сетевого ввода-вывода. Кроме того, Flink легко поддерживает очень большое состояние приложения. Его асинхронный и инкрементный контрольный алгоритм обеспечивает минимальное влияние на задержки обработки, гарантируя точную согласованность состояния за один раз.
* **низкое время задержки**, достигаемое, в т.ч. за счет собственной подсистемы управления памятью и ее эффективного использования – приложения Флинк оптимизированы для локального доступа. Состояние задачи (stateful) сохраняется в локально памяти или, если его размер превышает доступную память, на жестком диске.
* **веб-интерфейс**, который отображает граф обработки данных и позволяет посмотреть, сколько данных каждой подзадачи обработал конкретный worker. Благодаря этому можно определить, какой участок кода работает с задержкой, т.е. какой процент данных не успел обработаться.
* **отказоустойчивость** – Flink гарантирует согласованность состояния приложений в случае сбоев, периодически и асинхронно проверяя локальное состояние на необходимость перемещения в долговечное хранилище;
* гибкая работа с потоковыми данными – поддержка временных и неисправных событий, непрерывная потоковая модель передачи с обратным воздействием, реализация концепции «окон» для избирательной обработки данных в определенном временном промежутке (подробно механизм временных окон мы описывали здесь на примере Apache Kafka Streams);
* **2 режима работы с данными в 1 среде** – потоковая передача и пакетная обработка;

## Недостатки

* даже при наличии отказоустойчивого хранилища состояний для приложений (stateful), которое поддерживает механизм контрольных точек (checkpoints), из него нельзя восстановиться при изменении код&#x430;**;**
* многие библиотеки Flink до сих пор находятся в бета-режиме, что затрудняет его использование в крупных Big Data проектах корпоративного сектора, где требуется высокая надежность.

Источник:&#x20;

* <https://bigdataschool.ru/wiki/flink>

Подробно:&#x20;

* <https://habr.com/ru/companies/ru_mts/articles/772898/>
* <https://bigdataschool.ru/blog/batch-and-streaming-analytics-with-flink-use-cases.html> (почитать)&#x20;
* <https://biconsult.ru/services/chto-takoe-apache-flink-0> (почитать)
