23 октября 2024 года опубликован предварительный выпуск Apache Flink. Знакомимся с самыми яркими новинками этого мажорного релиза: удаленные API, коннекторы и конфигурации, динамическая оптимизация логических планов, а также дизагрегированное состояние и управление им.
Критические изменения: удаление устаревших компонентов
Начнем с критических изменений, связанных с удалением устаревших компонентов. В Apache Flink 2.0 полностью удалены DataSet API, Scala DataStream и DataSet API. Вместо DataSet API используется DataStream API, о переходе на который мы писали здесь, а вместо Scala — Java DataStream API. Удалены SourceFuction, SinkFunction и Sink V1. Вместо них надо использовать Source и Sink V2. В связи с этой заменой скоро ожидается новая версия коннектора Kafka, а также коннекторов JDBC и ElasticSearch.
TableSoure и TableSink заменяются на DynamicTableSource и DynamicTableSink. Вместо TableSchema, TableColumn и Types используются Schema, Column и DataTypes соответственно. Также из API DataStream удалены некоторые устаревшие методы, а из REST API — устаревшие поля. Удалены устаревшие параметры конфигурации, аннотированные @Public и @PublicEvolving. Файл конфигурации flink-conf.yaml больше не поддерживается – вместо него все конфигурации записываются в YMAL-файл config.yaml. Выполнить миграцию можно с помощью соответствующего инструмента. Конфигурационные API, которые принимают объекты Java в качестве аргументов, удалены из StreamExecutionEnvironment и ExecutionConfig. Теперь их следует устанавливать через Configuration и ConfigOption. Чтобы избежать раскрытия внутренних интерфейсов, пользовательские функции больше не имеют полного доступа к ExecutionConfig. Вместо этого необходимые функции, такие как createSerializer(), getGlobalJobParameters() и isObjectReuseEnabled() теперь могут быть доступны контексту исполнения RuntimeContext напрямую.
Совместимость состояний между релизами версии 1 и 2 не гарантируется. Java 8 больше не поддерживается, минимальная версия Java 11. Также удален устаревший режим гибридного перемешивания.
Новые возможности Apache Flink 2.0
Одной из самых интересных новых функций Flink 2.0 стало введение дезагрегированного хранения и управления состоянием. Поскольку Flink разделяет вычисления от хранения данных, используя распределенные файловые системы (DFS) в качестве основного хранилища, можно обрабатывать терабайтные наборы данных, не беспокоясь об ограничениях локального диска. Задания можно масштабировать быстрее и эффективнее, адаптируясь к изменяющимся рабочим нагрузкам. Благодаря использованию моделей асинхронного выполнения потребление ресурсов становится более плавным, как и механизм создания контрольных точек.
С учетом перехода от эпохи MapReduce, где рабочие процессы — это тесно связанные узлы вычислений и хранения, к миру облачных вычислений контейнерных развертываний на Kubernetes в Apache Flink 2.0 введено ForStDB — дизагрегированное хранилище состояний. Оно удаленное хранилище, устраняя ограничения локального диска и скачкообразный рост потребления ресурсов. Также дизагрегированное хранилище состояний обеспечивает быстрое масштабирование для задач с большими состояниями (сотни терабайт) с быстрым созданием контрольных точек. Масштабные операции чтения/записи из удаленной DFS были невозможны в предыдущей версии Flink из-за существующей модели блокирующего выполнения. Поэтому в релизе 2.0 реализована асинхронная модель выполнения и дезагрегированное хранилище состояний с использованием Nexmark Q20 (SQL Filter Join). Это включает полную поддержку API асинхронного состояния и контрольных точек, асинхронный оператор SQL Join для асинхронного выполнения соединений, а также гибридный план выполнения SQL-запросов с прямым доступом к состоянию. Высокая производительность обеспечивается при прямой записи в DFS в асинхронном режиме выполнения.
Также введена динамическая оптимизация логических планов, в дополнение к физическим планам, на основе информации, полученной в ходе выполнения предыдущих этапов. Первоначальный набор стратегий оптимизации включает динамическое применение широковещательного объединения и оптимизации соединения неравномерно распределенных данных.
Таким образом, Apache Flink 2.0 стал еще ближе к полноценной унификации пакетной и потоковой обработки в одном фреймворке. В заключение отметим, что версия 2.0 Preview не является стабильной и не рекомендуется для использования в производственных средах. Хотя она уже включает большинство критических изменений, запланированных для релиза 2.0, финальный выпуск может быть изменен. Поэтому знакомиться с новинками фреймворка лучше в среде разработки на тестовых проектах.
Освойте возможности Apache Flink для пакетной и потоковой аналитики больших данных и машинного обучения на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники