# 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> (почитать)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.system-analyst-base.ru/hard-skills/integracii/middle+/apache-flink.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
