Табличное хранилище Apache Flink

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

Что такое табличное хранилище Apache Flink, зачем это нужно и почему оно пока не рекомендуется для применения в реальных проектах. Краткий обзор Apache Flink Table Store 0.1.0 для дата-инженеров и разработчиков распределенных приложений.

Что такое Flink Table Store и зачем это нужно

Уже более полугода, с релиза 1.14, выпущенного в сентябре 2021 года, о котором мы писали здесь, Apache Flink объединяет пакетную обработку данных с потоковой, позволяя смешивать ограниченные и неограниченные потоки в приложении. Для работы этого универсального stateful-механизма используются специальные табличные хранилища (Table Store), которые еще находятся в стадии бета-тестирования и пока не рекомендуются для производственной среды.

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

Чтобы решить эти проблемы, в Apache Flink появилось универсальное хранилище таблиц, которое расширяет возможности фреймворка и позволяет обеспечить сквозной опыт для пользователей. Flink Table Store стремится обеспечить унифицированную абстракцию хранилища, поэтому уже не нужно самостоятельно создавать множество различных хранилищ. Table Store — это унифицированное потоковое и пакетное хранилище для создания динамических таблиц Apache Flink. Оно предназначено для лучшего подключения к вычислительному движку Flink в качестве хранилища для потоковой передачи. Table Store использует полную структуру Log-Structured Merge-Tree (LSM) для высокой скорости и возможности обновления, а также запроса большого объема данных. Flink Table Store поддерживает следующие сценарии использования:

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

Таким образом, Flink Table Store позволяет реализовать следующие потребности:

  • использовать Flink для вставки данных в хранилище таблиц путем потоковой передачи журнала изменений, полученного из баз данных, или через пакетную загрузку из других хранилищ данных;
  • использовать Flink для запросов к хранилищу таблиц различными способами, включая потоковые запросы и пакетные OLAP-запросы. Впрочем, пользователи могут использовать другие механизмы, например, Apache Hive, для SQL-запросов из хранилища таблиц.

Под капотом Table Store используется гибридная архитектура хранения на основе Lake Store для хранения исторических данных и систему очередей, интегрированную с Apache Kafka для хранения добавочных данных. Для гибридного потокового чтения предоставляются добавочные моментальные снимки. Внутренний Lake Store хранит данные в виде колоночных файлов в файловой системе или объектном хранилище и использует структуру LSM для поддержки большого количества обновлений данных и высокопроизводительных запросов. Некоторые идеи технической реализации этих подходов заимствованы из Apache Iceberg и RocksDB, которое является stateful-бэкендом для Flink по умолчанию, о чем мы писали здесь.

В будущем разработчики планируют добавить к Table Store поддержку движка Apache Hive, Trino, PrestoDB и Spark, а также реализовать сервисы для ускорения обновлений и повышения производительности запросов. О том, как это реализовано в выпуске 0.3, а также внутреннюю структуру файлов и каталогов, мы рассказываем в новой статье.

Как работать с табличным хранилищем: пара примеров

Чтобы понять, как работает табличное хранилище, рассмотрим несколько практических примеров. После обновления фреймворка с поддержкой Table Store можно создать динамическую таблицу, используя следующий DDL-запрос:

-- set root path to session config
SET 'table-store.path' = '/tmp/table_store';

-- create a word count dynamic table without 'connector' option
CREATE TABLE word_count (
    word STRING PRIMARY KEY NOT ENFORCED,
    cnt BIGINT
);

Запишем в динамическую таблицу данные:

-- create a word data generator table
CREATE TABLE word_table (
    word STRING
) WITH (
    'connector' = 'datagen',
    'fields.word.length' = '1'
);

-- table store requires checkpoint interval in streaming mode
SET 'execution.checkpointing.interval' = '10 s';

-- write streaming data to dynamic table
INSERT INTO word_count SELECT word, COUNT(*) FROM word_table GROUP BY word;

Сделаем OLAP-запрос к этой таблице:

-- use tableau result mode
SET 'sql-client.execution.result-mode' = 'tableau';

-- switch to batch mode
RESET 'execution.checkpointing.interval';
SET 'execution.runtime-mode' = 'batch';

-- olap query the table
SELECT * FROM word_count;

И, наконец, выполним потоковый запрос:

-- switch to streaming mode
SET 'execution.runtime-mode' = 'streaming';

-- track the changes of table and calculate the count interval statistics
SELECT `interval`, COUNT(*) AS interval_cnt FROM
  (SELECT cnt / 10000 AS `interval` FROM word_count) GROUP BY `interval`;

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

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

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

Источники

  1. https://nightlies.apache.org/flink/flink-table-store-docs-release-0.1/
  2. https://nightlies.apache.org/flink/flink-table-store-docs-release-0.1/docs/try-table-store/quick-start/
Поиск по сайту