28 октября 2022 года вышел мажорный релиз Apache Flink. Что нового в выпуске 1.16.0, который сегодня имеет официальный статус стабильного: зачем нужен SQL Gateway, как улучшен Changelog State Backend, какие DDL-выражения добавлены и зачем внесена поддержка кэширования результата преобразования в PyFlink.
Главные обновления Apache Flink 1.16
В версии 1.16 Flink внесено множество улучшений как в пакетную, так и в потоковую обработку. Особенно следует отметить внедрение SQL Gateway и достижение полной совместимости с Hive Server2. SQL Gateway расширяет SQL-клиент через поддержку мультитенантности и подключаемых API через конечные точки, что решает проблему многопользовательского режима и интеграции с внешними службами. SQL Gateway поддерживает REST API и протокол HiveServer2, позволяя подключаться к SQL Gateway через cURL, Postman, HTTP-клиенты на различных языках программирования для отправки потоковых заданий, пакетных заданий и даже заданий OLAP.
Наличие подсказок присоединения позволяет пользователям Flink SQL вручную указывать оптимальные стратегии SQL-запросов с оператором JOIN, чтобы избежать необоснованных планов выполнения. Улучшен HashJoin и добавлен механизм отката при сбое. А динамическая отсечка разделов позволяет сократить количество операций ввода-вывода при сканировании и улучшить обработку соединений для SQL-запросов по схеме «звезда». Также добавлен новый режим гибридного перемешивания, чтобы улучшить использование ресурсов и производительность обработки. Подробнее о том, как он работает, читайте в нашей новой статье.
В потоковой обработке улучшен Changelog State Backend, который теперь предоставляет пользователям секундные или даже миллисекундные контрольные точки, чтобы значительно повысить отказоустойчивость, обеспечивая меньшую сквозную задержку для транзакционных заданий приемника. Также добавлен буфер овердрафта в BufferPool, чтобы уменьшить блокировку невыровненных контрольных точек. Начиная с версии 1.16.0, подзадача Flink может по умолчанию запрашивать до 5 дополнительных буферов сверх обычного настроенного количества. Функция разгрузки буфера вычисляет максимально возможную пропускную способность для подзадачи, когда она всегда занята, и регулирует объем данных в процессе передачи так, чтобы время потребления этих данных в процессе передачи было равно настроенному значению. Это изменение может немного увеличить потребление памяти заданием Flink. Чтобы восстановить старое поведение без запроса дополнительных, можно установить для параметра taskmanager.network.memory.max-overdraft-buffers-per-gate значение 0.
В табличном API и SQL удалено устаревшее строковое выражение DSL из Java/Scala/Python и расширен синтаксис DDL следующими выражениями:
- USING JAR поддерживает динамическую загрузку UDF-функций из JAR-архивов;
- CREATE TABLE AS SELECT (CTAS) позволяет создавать новые таблицы на основе существующих таблиц и запросов;
- ANALYZE TABLE позволяет пользователям вручную генерировать статистику таблиц, чтобы оптимизатор мог генерировать лучшие планы выполнения.
Также добавлена поддержка повторного JOIN для решения проблемы с задержкой обновлений с целью решить проблему отложенных потоковых обновлений во внешних системах при асинхронном и синхронном поиске. Параметр table.exec.async-lookup.output-mode сделан настраиваемым для модуля таблиц. Рекомендуется установить для этого параметра асинхронного режима значение ALLOW_UNORDERED, когда не требуется строгого порядка вывода, что даст значительный прирост производительности для потоков только для добавления. Также добавлена унифицированная абстракция для кэша источника поиска и связанных показателей для ускорения запросов поиска. Настраиваемый асинхронный режим (ALLOW_UNORDERED), определяемый через конфигурацию задания или подсказку поиска поможет повысить пропускную способность запросов.
Изначально во Flink SQL были некоторые недетерминированные операции, которые могли привести к неверным результатам или исключениям, что доставляло большие неудобства пользователям. В версиях Flink 1.15.0 и 1.15.1 для операторов генерировались недетерминированные UID, затрудняя возможность восстановления состояния или обновления до следующего обновления. Новый параметр конфигурации table.exec.uid.generation, введенный в версии 1.16, отключает настройку UID для новых конвейеров из нескомпилированных планов. А существующие конвейеры могут установить для параметра table.exec.uid.generation значение ALWAYS, если это поведение приемлемо.
В Apache Flink 1.16 параметры host/web-ui-port скрипта jobmanager.sh стали устаревшими и теперь и должны быть указаны с соответствующими параметрами в качестве динамических свойств. Для сложных потоковых заданий теперь можно обнаруживать и устранять потенциальные проблемы с корректностью перед запуском благодаря усилению правильности недетерминированных обновлений, присутствующих в конвейере журнала изменений.
Коннектор Elasticsearch перемещен во внешний репозиторий и устранена поддержка Hive 1.*, 2.1.* и 2.2.*. В пакетном режиме приемник Hive теперь по умолчанию будет сообщать статистику в хранилище метаданных Hive для записанных таблиц и разделов. Это может занять много времени для большого количества записанных файлов. Можно отключить эту функцию, установив для параметра table.exec.hive.sink.statistic-auto-gather.enable значение false.
В Apache Flink 1.16 удалено несколько API-интерфейсов курсора Pulsar Connector: CursorPosition#seekPosition() и StartCursor#seekPosition(). А StopCursor#shouldStop() теперь возвращает StopCondition вместо логического значения. Приемник StreamingFileSink стал устаревшим, уступив место в пользу унифицированного FileSink, впервые появившемся в Apache Flink 1.12.
В версии 1.16 схемы данных AVRO, сгенерированные Flink, не могут быть проанализированы с помощью Python и теперь используют пространство имен «org.apache.flink.avro.generated» для совместимости с AVRO Python SDK. Также Flink теперь поддерживает бинарный формат Protobuf, позволяя использовать его непосредственно в приложениях Table API или SQL.
Внедрена поддержка настраиваемой стратегии RateLimitingStrategy для AsyncSinkWriter, чтобы разработчики приемника могли изменять его асинхронное поведение при сбое запросов. Если RateLimitingStrategy не указан, будет использоваться текущее значение по умолчанию AIMDRateLimitingStrategy.
REST API Apache Flink теперь возвращает ошибку 503 Service Unreachable, когда запрос сделан, но вспомогательный компонент еще не готов. Раньше это возвращало ошибку внутреннего сервера 500. Идентификатор задания в режиме приложения больше не равен 0000000000, а основан на идентификаторе кластера, что полезно при включенном режиме высокой доступности.
Расширенная поддержка Python 3.6 в PyFlink 1.16 закончилась 23 декабря 2021 года. Ожидается, что PyFlink 1.16 станет последней версией, поддерживающей Python3.6. Для поддержки Python3.9 PyFlink обновляет версию зависимостей серии: apache-beam==2.38.0, arrow==5.0.0 и pemja==0.2.6.
Data Scientist’ам пригодится поддержка кэширования результата преобразования через DataStream#cache. Кэшированный промежуточный результат отложено генерируется при первом вычислении промежуточного результата, чтобы его можно было повторно использовать в последующих заданиях. Если кэш потерян, он будет пересчитан с использованием исходных преобразований. Пока поддерживается только пакетный режим. Эта функция очень полезна для машинного обучения и интерактивного программирования на Python.
Реализация Hadoop для файловых систем обновлена до версии 3.3.2, предоставляя пользователям Flink ряд современных функции, например, включение шифрования состояния на стороне клиента. Коннектор Kafka теперь по умолчанию использует клиент Kafka 3.1.1, а коннектор Hive 2.3 обновлен до 2.3.9.
Наконец, зависимости метрик системных ресурсов были обновлены до следующего:
com.github.oshi:oshi-core:6.1.5 (licensed under MIT license) net.java.dev.jna:jna-platform:jar:5.10.0 net.java.dev.jna:jna:jar:5.10.0
О новинках релиза 1.17 читайте в нашей новой статье.
Освойте тонкости настройки и использования Apache Flink для потоковой обработки событий в распределенных приложениях аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники