OLAP-сервис Apache Flink

Flink SQL OLAP, Flink Olap service, Apache Flink развертывание, Apache Flink примеры курсы обучение, разработка Flink -приложений, Flink для инженеров данных и разработчиков, Школа Больших Данных Учебный Центр Коммерсант

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

Служба Flink OLAP: архитектура и принципы работы

Идея выделить в Apache Flink механизм OLAP для анализа данных в потоковом хранилище появилась еще год назад в дорожной карте развития фреймворка. Хотя Flink и до этого позволял решать аналитические задачи как частный случай пакетной обработки, в будущем релизе 2.0, о котором мы писали здесь, планируется новый API потоковой и пакетной обработки аналитической обработки данных. Для этого будет внедрена поддержка API-интерфейсов хранилища для управления данными и метаданными, таких как: CTAS/RTAS, CALL, TRUNCATE и т.д., оптимизация на основе затрат со статистикой и индексация полей в ​​потоковых хранилищах LakeHouse. Ожидается, что все это позволит улучшить выполнение краткосрочных OLAP-заданий с низкой задержкой и параллельным выполнением.

Уже в выпуске 1.19 и ранее Flink позволяет настроить локальную службу OLAP, а также развернуть ее в рабочей среде. Служба Flink OLAP состоит из трех частей: клиента, шлюза Flink SQL и кластера сеансов Flink. Клиентом может быть любой клиент, который взаимодействует с Flink SQL Gateway, например SQL Client, JDBC-драйвер Flink и т. д. Шлюз SQL обеспечивает простой способ анализа SQL-запроса, поиска метаданных, анализа статистики таблиц, оптимизации плана и отправки JobGraph в кластер. Этот сервис позволяет нескольким удаленным клиентам одновременно выполнять SQL-запросы, обеспечивая простой способ отправить задание Flink в кластер, найти метаданные и проанализировать данные во внешней сети. SQL-шлюз состоит из подключаемых конечных точек и процессора SqlGatewayService, который многократно используется конечными точками для обработки запросов. JDBC-драйвером Flink является Java-библиотека для подключения и отправки SQL-операторов на SQL Gateway в качестве JDBC-сервера. Перед использованием JDBC-драйвера необходимо запустить шлюз SQL в качестве JDBC-сервера и связать его с кластером Flink. Все OLAP-запросы выполняются в кластере сеансов Flink, позволяя сократить накладные расходы на запуск вычислительной среды.

Flink Olap service
Архитектура службы Flink OLAP

Развертывание Flink как OLAP-сервиса дает следующие преимущества:

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

Развертывание OLAP-сервиса Flink

Запустить Flink OLAP можно локально и в производственном развертывании. Для локальной установки необходима Java 11 и бинарная версия фреймворка, скачиваемая с официального сайта. Распаковав архив с командой

tar -xzf flink-*.tgz

далее следует запустить локальный кластер с помощью скрипта bash, поставляемого с Flink:

./bin/start-cluster.sh

Затем можно перейти к веб-интерфейсу по адресу http://localhost:8081, чтобы просмотреть панель мониторинга фреймворка и убедиться, что кластер запущен и работает. Чтобы запустить CLI со встроенным шлюзом, надо вызвать команду

./bin/sql-client.sh

Далее можно просто выполнять запросы в CLI и получать результаты.

Для производственного развертывания сервиса Flink OLAP нужно настроить все компоненты этой службы, т.е. кластер сеансов и шлюз SQL. Как уже было отмечено ранее, для отправки запросов в SQL Gateway надо использовать JDBC-драйвер Flink, который обеспечивает низкоуровневое управление соединениями. Чтобы ускорить передачу данных, рекомендуется повторно использовать JDBC-соединения. Это поможет избежать частого создания и закрытия сеансов на шлюзе, также снизит задержку выполнения запросов.

Кластер сеансов Flink можно развернуть в Native Kubernetes – системе оркестрации контейнеров для автоматизации развертывания, масштабирования и управления приложениями, используя режим сеанса. Развертывая в Native Kubernetes, кластер сеансов может динамически выделять и освобождать диспетчеры задач. Настройка параметра slotmanager.number-of-slots.min в кластере сеансов поможет значительно сократить время холодного запуска запроса.

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

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

Далее следует настроить коннекторы к источникам данных, т.к. кластер сеансов и шлюз SQL используют их для анализа статистики таблицы и чтения данных из настроенного источника. Использование JDK17 в ZGC может значительно оптимизировать проблему сборки мусора в метапространстве, поскольку ZGC (Z Garbage Collector) является масштабируемым сборщиком мусора с малой задержкой. ZGC выполняет всю дорогостоящую работу одновременно, не останавливая выполнение потоков приложения более чем на 10 мс, что делает его подходящим для приложений, требующих малой задержки и/или использующих очень большую кучу памяти порядка нескольких терабайт. Это характерно для stateful-приложений, включая OLAP сервисы. Сборщик мусора ZGC может обеспечить время паузы приложения, близкое к нулю, очищая память от неиспользуемых объектов.

OLAP-запросы необходимо выполнять в пакетном режиме, используя пакетный планировщик позволяет, чтобы планировать их поэтапно и избежать взаимоблокировок. Также рекомендуется настроить конфигурацию slotmanager.number-of-slots.min в качестве зарезервированного пула ресурсов, обслуживающего OLAP-запросы. Менеджер задач TaskManager следует настроить с большей спецификацией ресурсов, чтобы увеличить объем локальных вычислений и снизить накладные расходы на сеть, сериализацию и десериализацию данных. Аналогичное справедливо и для диспетчера заданий JobManager, который является единой точкой вычислений в OLAP-сценариях и может требовать больше ресурсов.

Освойте применение Apache Flink для потоковой обработки событий в распределенных приложениях аналитики больших данных и машинного обучения на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://flink.apache.org/what-is-flink/roadmap/
  2. https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/olap_quickstart/
  3. https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html
Поиск по сайту