apache flink что такое

Как создать приложение для потоковой обработки данных при помощи Apache Flink

Среди рассматриваемых нами фреймворков для сложной обработки данных на Java есть и Apache Flink. Хотим предложить вам перевод неплохой статьи из блога Analytics Vidhya на портале Medium, чтобы оценить читательский интерес. Не стесняйтесь участвовать в голосовании!

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

В этой статье мы разберем «снизу вверх», как организовать потоковую обработку при помощи Flink; в облачных сервисах и на других платформах предоставляются решения для потоковой обработки (в некоторых из них «под капотом» интегрирован Flink). Если вы хотели разобраться в этой теме с азов, то нашли как раз то, что искали.

Наше монолитное решение не справлялось с возрастающими объемами входящих данных; следовательно, его требовалось развивать. Настало время перейти к новому поколению в эволюции нашего продукта. Было решено воспользоваться потоковой обработкой. Это новая парадигма поглощения данных, более выигрышная по сравнению с традиционной пакетной обработкой данных.

Apache Flink: краткая характеристика

Apache Flink – это фреймворк для масштабируемой распределенной обработки потоков, предназначенный для операций над непрерывными потоками данных. В рамках этого фреймворка используются такие концепции как источники, преобразования потоков, параллельная обработка, планирование, присваивание ресурсов. Поддерживаются разнообразные места назначения данных. В частности, Apache Flink может подключаться к HDFS, Kafka, Amazon Kinesis, RabbitMQ и Cassandra.

Flink известен своей высокой пропускной способностью и малыми задержками, поддерживает согласованную строго однократную обработку (все данные обрабатываются по одному разу, без дублирования), а также высокую доступность. Как и любой другой успешный опенсорсный продукт, Flink обладает обширным сообществом, в котором культивируются и расширяются возможности этого фреймворка.

Flink может обрабатывать потоки данных (размер потока является неопределенным) или множества данных (размер множества данных является определенным). В этой статье рассматривается именно обработка потоков (обращение с объектами DataStream ).

Потоковая обработка и присущие ей вызовы

В настоящее время, при повсеместной распространенности устройств «Интернета Вещей» и прочих сенсоров, данные непрерывно поступают из множества источников. Такой нескончаемый поток данных требует адаптировать к новым условиям традиционные пакетные вычисления.

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

Из чего состоят пакеты Flink

Сток данных

Одна из основных целей Flink, наряду с преобразованием данных, заключается в управлении потоками и направлении их в те или иные места назначения. Эти места называются «стоками». В Flink есть встроенные стоки (текст, CSV, сокет), а также представляемые «из коробки» механизмы для подключения к иным системам, например, Apache Kafka.

Метки событий Flink Event

При обработке потоков данных исключительно важен фактор времени. Существует три способа определить временную метку:

Недостаток, возникающий при использовании времени обработки существенен в распределенных и асинхронных окружениях, поскольку это не детерминистический метод. Метки времени, которыми сопровождаются события потока, могут рассинхронизироваться, если между ходом машинных часов есть разница; сетевая задержка также может привести к запаздыванию во времени, когда событие ушло с одной машины и прибыло на другую.

Поскольку не сам Flink устанавливает метку времени, должен быть механизм, который просигнализирует, должно быть обработано это событие или нет; данный механизм называется «водяной знак» (watermark). Тема водяных знаков выходит за рамки данной статьи; подробнее об этом можно почитать в документации по Flink.

Время поглощения не подходит для обработки событий, приходящих вне очереди, либо опоздавших данных, поскольку метка времени ставится, когда поглощение начинается; этим оно отличается от времени события, в котором предусмотрена возможность выявлять отложенные события и обрабатывать их, опираясь на механизм водяных знаков.

Подробнее о временных метках и о том, как они влияют на потоковую обработку, можно почитать по следующей ссылке.

Разбивка на окна

Поток по определению бесконечен; следовательно, механизм обработки связан с определением фрагментов (например, периодов-окон). Таким образом поток разбивается на партии, удобные для агрегации и анализа. Определение окна – это операция над объектом DataStream или каким-то другим, который его наследует.

Есть несколько видов окон, зависящих от времени:

Кувыркающееся окно (конфигурация по умолчанию):

Поток делится на окна эквивалентного размера, которые не перекрываются друг с другом. Пока поток течет, Flink непрерывно производит вычисления над данными на основе такой фиксированной во времени раскадровки.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Такие окна могут перекрываться друг с другом, а свойства скользящего окна определяются размером данного окна и отступом (когда начинать следующее окно). В таком случае в конкретный момент времени могут обрабатываться события, относящиеся более чем к одному окну.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое
Скользящее окно

А вот как оно выглядит в коде:

Включает все события, ограниченные рамками одного сеанса. Сеанс завершается при отсутствии активности, или если по истечении определенного временного периода не зафиксировано никаких событий. Данный период может быть фиксированным или динамическим, в зависимости от обрабатываемых событий. Теоретически, если промежуток между сеансами меньше размера окна, то сеанс может никогда не закончиться.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

В первом фрагменте кода ниже показан сеанс с фиксированной временной величиной (2 секунды). Второй пример реализует динамическое сеансовое окно, на основе событий потока.

Вся система трактуется как единственное окно.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Flink также позволяет реализовывать собственные окна, логику которых определяет пользователь.

Кроме окон, зависящих от времени, есть и другие, например, Окно счета, где устанавливается предельное количество входящих событий; по достижении порога X, Flink обрабатывает X событий.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Окно счета для трех событий

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

Описание потока

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

Реализация, изображенная ниже, состоит из двух путей обработки. Тот, что показан в верхней части разделяет один поток на два боковых потока, а затем объединяет их, получая поток третьего типа. Сценарий, изображенный в нижней части схемы, описывает обработку потока, после которой результаты работы передаются в сток.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Далее попытаемся пощупать руками практическую реализацию вышеизложенной теории; весь исходный код, рассматриваемый далее, выложен на GitHub.

Базовая обработка потоков (пример #1)

Усвоить концепции Flink будет проще, если начать с простейшего приложения. В этом приложении продьюсер записывает файлы в каталог, таким образом имитируется поток информации. Flink считывает файлы из этого каталога и записывает обобщенную информацию по ним в каталог назначения; это и есть сток.

Далее давайте внимательно посмотрим, что происходит при обработке:

Преобразование сырых данных в объект:

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

Создание точки назначения для потока (реализация стока данных):

Образец кода, описывающего создание стока данных.

Расщепление потоков (пример #2)

Функция ProcessFunction собирает определенные объекты (на основе критерия) и отправляет в главный выводной коллектор (заключается в SingleOutputStreamOperator ), а остальные события передаются в боковые выводы. Поток DataStream разделяется по вертикали и публикует различные форматы для каждого бокового потока.

Обратите внимание: определение бокового потока вывода основано на уникальном теге вывода (объект OutputTag ).

Пример кода, демонстрирующий, как разделить поток

Объединение потоков (пример #3)

Последняя операция, которая будет рассмотрена в этой статье – объединение потоков. Идея заключается в том, чтобы скомбинировать два разных потока, форматы данных в которых могут отличаться, из которых собрать один поток с унифицированной структурой данных. В отличие от операции объединения из SQL, где слияние данных происходит по горизонтали, объединение потоков осуществляется по вертикали, поскольку поток событий продолжается и никак не ограничен во времени.

Объединение потоков выполняется путем вызова метода connect, после чего для каждого элемента в каждом отдельном потоке определяется операция отображения. В результате получается объединенный поток.

Листинг, демонстрирующий получение объединенного потока

Создание рабочего проекта

Итак, резюмируем: демо-проект загружен на GitHub. Там описано, как его собрать и скомпилировать. Это хорошая отправная точка, чтобы поупражняться с Flink.

Выводы

В этой статье описаны основные операции, позволяющие создать рабочее приложение для обработки потоков на основе Flink. Цель приложения – дать общее представление о важнейших вызовах, присущих потоковой обработке, и заложить базис для последующего создания полнофункционального приложения Flink.

Поскольку у потоковой обработки множество аспектов, и она сопряжена с разными сложностями, многие вопросы в этой статье остались не раскрыты; в частности, выполнение Flink и управление задачами, использование водяных знаков при установке времени для потоковых событий, подсадка состояния в события потока, выполнение итераций потока, выполнение SQL-подобных запросов к потокам и многое другое.

Надеемся, этой статьи было достаточно, чтобы вам захотелось попробовать Flink.

Источник

Apache flink что такое

Apache Flink – это распределенная отказоустойчивая платформа обработки информации с открытым исходным кодом, используемая в высоконагруженных Big Data приложениях для анализа данных, хранящихся в кластерах Hadoop. Разработанный в 2010 году в Техническом университете Берлина в качестве альтернативы Hadoop MapReduce для распределенных вычислений больших наборов данных, Flink использует подход ориентированного графа, устраняя необходимость в отображении и сокращения [1].

Подобно Apache Spark, Flink имеет готовые коннекторы с Apache Kafka, Amazon Kinesis, HDFS, Cassandra, Google Cloud Platform и др., а также интегрируется со всеми основными системами управления кластерами: Hadoop YARN, Apache Mesos и Kubernetes. Кроме того, Флинк может использоваться в качестве основы автономного кластера [1].

Как устроен Apache Flink: архитектура и принцип работы

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

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

Подобно другому популярному фреймворку потоковой обработки Big Data, Apache Spark, Флинк содержит оптимизатор и библиотеки для машинного обучения, аналитических графиков и реляционной обработки данных.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такоеАрхитектура Apache Flink

Преимущества и недостатки Флинк

Ключевыми достоинствами Apache Flink можно назвать следующие [1]:

При всех вышеперечисленных достоинствах, для Флинк характерны следующие недостатки:

Сравнению Flink с Apache Spark, другим популярным фреймворком потоковой обработки больших данных мы посвятили отдельную статью.

Источник

Apache Flink — Краткое руководство

Прогресс данных за последние 10 лет был огромным; это породило термин «большие данные». Не существует фиксированного размера данных, который вы можете назвать большими данными; любые данные, которые ваша традиционная система (RDBMS) не может обработать, — это большие данные. Эти Большие Данные могут быть в структурированном, полуструктурированном или неструктурированном формате. Первоначально в данных было три измерения — объем, скорость, разнообразие. Размеры теперь вышли за пределы только трех. Теперь мы добавили другие Vs — Veracity, Validity, Vulnerability, Value, Variable и т. Д.

Большие данные привели к появлению множества инструментов и платформ, которые помогают в хранении и обработке данных. Существует несколько популярных сред больших данных, таких как Hadoop, Spark, Hive, Pig, Storm и Zookeeper. Это также дало возможность создавать продукты Next Gen в нескольких областях, таких как здравоохранение, финансы, розничная торговля, электронная коммерция и многое другое.

Будь то MNC или стартап, каждый использует большие данные для их хранения, обработки и принятия более разумных решений.

Apache Flink — пакетная обработка в режиме реального времени

С точки зрения больших данных, существует два типа обработки:

Обработка, основанная на данных, собранных во времени, называется пакетной обработкой. Например, менеджер банка хочет обработать данные за последний месяц (собранные за определенное время), чтобы узнать количество чеков, которые были отменены за последний 1 месяц.

Обработка, основанная на непосредственных данных для мгновенного результата, называется обработкой в ​​реальном времени. Например, менеджер банка получает предупреждение о мошенничестве сразу после совершения мошеннической операции (мгновенный результат).

В приведенной ниже таблице перечислены различия между пакетной обработкой и обработкой в ​​реальном времени.

Периодически обрабатывается в минутах, часах, днях и т. Д.

Прошлые данные на диске

Пример — Генерация счета

Пример — оповещение о транзакции через банкомат

Периодически обрабатывается в минутах, часах, днях и т. Д.

Прошлые данные на диске

Пример — Генерация счета

Пример — оповещение о транзакции через банкомат

В наши дни обработка в реальном времени широко используется в каждой организации. Варианты использования, такие как обнаружение мошенничества, оповещения в реальном времени в сфере здравоохранения и оповещения о сетевых атаках, требуют обработки мгновенных данных в режиме реального времени; задержка в несколько миллисекунд может оказать огромное влияние.

Идеальным инструментом для таких случаев использования в реальном времени был бы тот, который может вводить данные как поток, а не как пакет. Apache Flink — это инструмент для обработки в реальном времени.

Apache Flink — Введение

Apache Flink — это среда обработки в реальном времени, которая может обрабатывать потоковые данные. Это среда обработки потоков с открытым исходным кодом для высокопроизводительных, масштабируемых и точных приложений реального времени. Он имеет истинную потоковую модель и не принимает входные данные в виде пакетов или микропакетов.

Apache Flink был основан компанией Data Artisans и теперь разрабатывается под лицензией Apache от Apache Flink Community. В этом сообществе более 479 участников и 15500 + коммитов.

Экосистема на Apache Flink

На приведенной ниже диаграмме показаны различные уровни экосистемы Apache Flink —

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Место хранения

Apache Flink имеет несколько опций, откуда он может читать / записывать данные. Ниже приведен основной список хранения —

развертывание

Вы можете развернуть Apache Fink в локальном режиме, режиме кластера или в облаке. Кластерный режим может быть автономным, YARN, MESOS.

В облаке Flink может быть развернут на AWS или GCP.

Это уровень времени выполнения, который обеспечивает распределенную обработку, отказоустойчивость, надежность, возможность итеративной обработки и многое другое.

API и библиотеки

Это верхний слой и самый важный слой Apache Flink. Он имеет Dataset API, который заботится о пакетной обработке, и Datastream API, который заботится о потоковой обработке. Есть и другие библиотеки, такие как Flink ML (для машинного обучения), Gelly (для обработки графиков), таблицы для SQL. Этот уровень предоставляет разнообразные возможности Apache Flink.

Apache Flink — Архитектура

Apache Flink работает над архитектурой Kappa. Архитектура Kappa имеет один процессор — поток, который обрабатывает весь ввод как поток, а механизм потоковой передачи обрабатывает данные в режиме реального времени. Пакетные данные в архитектуре каппа — это особый случай потоковой передачи.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Ключевой идеей в архитектуре Kappa является обработка как пакетных данных, так и данных в реальном времени с помощью единого механизма обработки потоков.

Большая часть инфраструктуры больших данных работает на архитектуре Lambda, которая имеет отдельные процессоры для пакетных и потоковых данных. В архитектуре Lambda у вас есть отдельные кодовые базы для пакетного и потокового просмотра. Для запроса и получения результата необходимо объединить кодовые базы. Нелегко поддерживать отдельные кодовые базы / представления и объединять их, но архитектура Kappa решает эту проблему, поскольку имеет только одно представление — в режиме реального времени, поэтому объединение кодовой базы не требуется.

Это не означает, что архитектура Kappa заменяет архитектуру Lambda, она полностью зависит от варианта использования и приложения, которое решает, какая архитектура предпочтительнее.

На следующей диаграмме показана архитектура выполнения заданий Apache Flink.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

программа

Это кусок кода, который вы запускаете на кластере Flink.

клиент

Он отвечает за сбор кода (программы) и построение графика потока данных задания, а затем передает его в JobManager. Он также извлекает результаты работы.

JobManager

После получения графика потока данных задания от клиента он отвечает за создание графика выполнения. Он назначает задание для TaskManager в кластере и контролирует выполнение задания.

Диспетчер задач

Он отвечает за выполнение всех задач, которые были назначены JobManager. Все TaskManager запускают задачи в отдельных слотах с указанным параллелизмом. Он отвечает за отправку статуса задач в JobManager.

Особенности Apache Flink

Особенности Apache Flink следующие —

Он имеет потоковый процессор, который может запускать как пакетные, так и потоковые программы.

Он может обрабатывать данные с молниеносной скоростью.

API доступны на Java, Scala и Python.

Предоставляет API-интерфейсы для всех распространенных операций, которые очень просты в использовании для программистов.

Обрабатывает данные с низкой задержкой (наносекунды) и высокой пропускной способностью.

Его отказоустойчивый. Если происходит сбой узла, приложения или оборудования, это не влияет на кластер.

Может легко интегрироваться с Apache Hadoop, Apache MapReduce, Apache Spark, HBase и другими инструментами для работы с большими данными.

Управление в памяти может быть настроено для лучшего вычисления.

Он хорошо масштабируется и может масштабироваться до тысяч узлов в кластере.

Оконное управление очень гибкое в Apache Flink.

Предоставляет библиотеки обработки графиков, машинного обучения, обработки сложных событий.

Он имеет потоковый процессор, который может запускать как пакетные, так и потоковые программы.

Он может обрабатывать данные с молниеносной скоростью.

API доступны на Java, Scala и Python.

Предоставляет API-интерфейсы для всех распространенных операций, которые очень просты в использовании для программистов.

Обрабатывает данные с низкой задержкой (наносекунды) и высокой пропускной способностью.

Его отказоустойчивый. Если происходит сбой узла, приложения или оборудования, это не влияет на кластер.

Может легко интегрироваться с Apache Hadoop, Apache MapReduce, Apache Spark, HBase и другими инструментами для работы с большими данными.

Управление в памяти может быть настроено для лучшего вычисления.

Он хорошо масштабируется и может масштабироваться до тысяч узлов в кластере.

Оконное управление очень гибкое в Apache Flink.

Предоставляет библиотеки обработки графиков, машинного обучения, обработки сложных событий.

Apache Flink — системные требования

Ниже приведены системные требования для загрузки и работы на Apache Flink.

Рекомендуемая операционная система

Требование к памяти

Примечание. Java 8 должна быть доступна с уже установленными переменными среды.

Apache Flink — Настройка / Установка

Перед началом установки / установки Apache Flink давайте проверим, установлена ​​ли в нашей системе Java 8.

Java — версия

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Теперь мы продолжим загрузку Apache Flink.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Теперь распакуйте файл tar.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Перейдите в домашний каталог Флинка.

Запустите кластер Flink.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Откройте браузер Mozilla и перейдите по указанному ниже URL-адресу, откроется веб-панель Flink.

HTTP: // локальный: 8081

Так выглядит пользовательский интерфейс Apache Flink Dashboard.

apache flink что такое. Смотреть фото apache flink что такое. Смотреть картинку apache flink что такое. Картинка про apache flink что такое. Фото apache flink что такое

Теперь кластер Flink запущен и работает.

Apache Flink — Концепции API

Flink имеет богатый набор API-интерфейсов, с помощью которых разработчики могут выполнять преобразования как пакетных данных, так и данных в реальном времени. Разнообразные преобразования включают в себя отображение, фильтрацию, сортировку, объединение, группирование и агрегирование. Эти преобразования Apache Flink выполняются для распределенных данных. Давайте обсудим различные API, предлагаемые Apache Flink.

API набора данных

API набора данных в Apache Flink используется для выполнения пакетных операций с данными за период. Этот API может использоваться в Java, Scala и Python. Он может применять различные виды преобразований к наборам данных, такие как фильтрация, отображение, агрегирование, объединение и группировка.

Наборы данных создаются из таких источников, как локальные файлы, или путем чтения файла из определенного источника, и данные результатов могут быть записаны в различные приемники, такие как распределенные файлы или терминал командной строки. Этот API поддерживается языками программирования Java и Scala.

Вот программа Wordcount API Dataset —

DataStream API

Этот API используется для обработки данных в непрерывном потоке. Вы можете выполнять различные операции, такие как фильтрация, отображение, управление окнами, агрегация данных потока. В этом потоке данных есть различные источники, такие как очереди сообщений, файлы, потоки сокетов, и данные результатов могут быть записаны в различные приемники, такие как терминал командной строки. Оба языка программирования Java и Scala поддерживают этот API.

Вот потоковая программа Wordcount API DataStream, где у вас есть непрерывный поток подсчетов слов, и данные группируются во втором окне.

Apache Flink — Табличные API и SQL

Table API — это реляционный API с языком выражений, подобным SQL. Этот API может выполнять как пакетную, так и потоковую обработку. Он может быть встроен в API Java и Scala Dataset и Datastream. Вы можете создавать таблицы из существующих наборов данных и потоков данных или из внешних источников данных. С помощью этого реляционного API вы можете выполнять такие операции, как объединение, агрегирование, выбор и фильтрация. Независимо от того, является ли ввод пакетным или потоковым, семантика запроса остается неизменной.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пакетная обработкаОбработка в реальном времени