Недавно мы писали об анонсированных новинках Apache NiFi 2.0. Наконец, 25 ноября 2023 года этот долгожданный мажорный релиз опубликован. Знакомимся с главными новостями версии 2.0, в которой более 900 обновлений, включая новые функции, улучшения и исправления ошибок.
ТОП-7 новинок в Apache NiFi 2.0
Прежде всего, важной новинкой NiFi 2.0 является поддержка нативного Python API для процессоров, о чем мы недавно писали здесь и здесь. Скриптовые процессоры активно используются для преобразования данных в NiFi, выполняя сценарии на основе Jython. Однако Jython запускается на JVM и не поддерживает библиотеки CPython. Будучи совместимым по синтаксису, он не использует богатство библиотек Python. Кроме того, использование множества процессоров на основе сценариев вредит UX, поскольку их сложно настраивать с помощью файлов сценариев и/или их тел. В результате получается поток данных, который трудно понять, поскольку вместо процессоров с понятными названиями. Ими также сложно поделиться. Чтобы устранить это, в NiFi 2.0 реализованы новые API на основе Python для разработки процессоров, использующие библиотеку Py4J, которая позволяет программам Python, работающим в интерпретаторе Python, динамически получать доступ к объектам Java на виртуальной машине Java. Методы вызываются так, будто объекты Java находятся в интерпретаторе Python, а к коллекциям Java можно получить доступ через стандартные методы коллекций Python. Библиотека Py4J также позволяет программам Java вызывать объекты Python. Таким образом, Java-фреймворк наконец дата-инженеру позволяет использовать простой и популярный язык программирования для создания собственных компонентов.
А новые Python-процессоры обеспечивают взаимодействие с генеративными нейросетями типа ChatGPT и векторными базами данных. Они могут принимать неструктурированный текст, разбивать его на фрагменты и обрабатывать.
Также добавлен stateless-режим выполнения для групп процессов, что мы разбирали в этом материале. Это повышает производительность за счет прямой интеграции с репозиториями без необходимости сохранять поток и настраивать отдельный процессор, чтобы указать на него. Также обеспечивается видимость происходящего и улучшаются возможности Provenance, поскольку ExecuteStateless показывает все события так, будто их выполняет один процессор.
Реализован API правил анализа потока данных, который позволяет проверить, находится ли поток в корректном состоянии, определенном пользователями путем создания правил анализа потока. Эти правила представляют собой новый тип компонентов, у них есть свойства, их можно добавлять в NiFi как расширения через nars, они версионируются, сохраняются в flow.xml и т.д. Фреймворк сам заботится о выполнении правил по мере необходимости. Каждому правилу предоставляется представление потока или его части, определяемое интерфейсом, и оно может анализировать его любым подходящим способом. Результат анализа представлен нулем или более объектами нарушения правил, которые с этого момента платформа принимает и обрабатывает. Эффект результата анализа по тому или иному правилу зависит от типа правила, которое может быть либо рекомендацией или политикой. Рекомендации — это информация, отображаемая пользователю. Политика более строгая, которая не только доступна пользователю для просмотра. Политики делают недействительными компоненты, нарушившие ранее определенное правило. Результаты анализа можно отображать, а также отключать (игнорировать) или повторно включать.
Реализованы службы реестра схем для Amazon Glue и Apicurio – инструмента проектирования API, как REST API в виде спецификаций OpenAPI, так и AsyncAPI, пример которой мы приводили здесь, и провайдер параметров для менеджера паролей 1Password Vault. Также в Apache NiFi 2.0 добавлена cлужба контроллера YamlTreeReader для синтаксического анализа YAML-записей, которая разбирает их на отдельные объекты Record. Если встречается массив, каждый элемент этого массива будет рассматриваться как отдельная запись. Если настроенная схема содержит поле, которого нет в YAML, будет использоваться нулевое значение. Если YAML содержит поле, которого нет в схеме, это поле будет пропущено. Напомним, Конфигурация потока описывается в файле flow.json, а не в YAML-документе как было раньше.
Новые процессоры для дата-инженера и миграция БД метаданных
Дата-инженеру также будут полезны возможности, обеспечиваемые новыми процессорами в версии 2.0. Например, добавлен процессор ListenOTLP для сбора OpenTelemetry – платформы и набора инструментов для обеспечения наблюдаемости, т.е. создания данных телеметрии, таких как трассировки, метрики и журналы программного и аппаратного обеспечения, а также управления ими. OpenTelemetry не зависит от поставщика и инструмента, поэтому может использоваться с различными open-source и коммерческими бэкендами. Также добавлены процессоры ListenSlack и ConsumeSlack для обработки сообщений из мессенджера Slack. Подробнее про эти и другие процессоры-слушатели мы рассказываем здесь. Процессор PackageFlowFile обеспечивает запись файлов потока и атрибутов в FlowFile версии 3.
А процессоры EncryptContentAge и DecryptContentAge поддерживают спецификацию age-encryption.org – простого и безопасного инструмента шифрования файлов. Этот формат и библиотека Go имеет небольшие явные ключи, отсутствие опций конфигурации и возможность компоновки в стиле UNIX. Спецификация age-encryption.org/v1 предоставляет современную альтернативу таким протоколам, как OpenPGP, для шифрования и дешифрования файлов. Спецификация age использует алгоритм ChaCha20-Poly1305 для аутентификации шифрования полезных данных файлов и поддерживает асимметричные пары ключей с использованием алгоритма Curve25519 с обменом ключами Диффи-Хеллмана, известного как X25519. Тип получателя алгоритм X25519 в age представляет открытый и закрытый ключи с использованием удобочитаемой кодировки Bech32. Команда age доступна во всех современных операционных системах. Эти свойства безопасности и удобства использования делают его отличным решением для сценариев использования шифрования файлов, чем текущие стратегии пользовательской обработки в процессорах, таких как EncryptContent, работу которого мы разбирали здесь. Проект Jagged обеспечивает реализацию спецификации age-encryption для Java. Новые процессоры EncryptContentAge и DecryptContentAge поддерживают тип получателя X25519 с опциями для ключей на основе свойств или файлов. Стандарт age-encryption поддерживает бронированную кодировку ASCII, что полезно, когда не удается обрабатывать необработанные двоичные файлы. Java 11 и 17 поддерживают алгоритм ChaCha20-Poly1305 и X25519, но для Java 8 требуется другой поставщик безопасности, например Bouncy Castle. Поддержка криптографических алгоритмов проверяется во время выполнения, чтобы обеспечить прозрачный возврат к Bouncy Castle.
Также в новой Apache NiFi 2.0 разрешено документирование конкретных вариантов использования служб процессоров и контроллеров в аннотациях. Ранее разработчик мог документировать созданные расширения с помощью аннотации @CapabilityDescription. Однако, этого недостаточно для поддержки всех вариантов описания сценариев использования точек расширения. Поэтому введены несколько новых аннотаций:
- @UseCase для описания конкретного варианта использования, который может быть реализован с помощью определенного расширения, для включения очень краткого описания в виде пары предложений и любых дополнительных примечаний, а также ключевых слов для этого варианта использования и способа настройки компонент для его реализации;
- @MultiProcessorUseCase для предоставления одинаковых подробностей о вариантах использования, которые включают несколько процессоров.
Еще для разработчика NiFi важно переносить конфигурацию созданных расширений, включая процессоры, службы контроллеров и задачи отчетности. Для этого в релизе 2.0 добавлены новые механизмы, обеспечивающие простую миграцию конфигураций UDF-компонентов, которые развиваются.
Администратору кластера NiFi важно знать о переходе с реляционной базы данных метаданных H2 на JetBrains Xodus. Эта миграция с ядра базы данных H2 на JetBrains Xodus нужна для оптимизации хранения истории конфигурации потока. Напомним, H2 – это открытая кроссплатформенная реляционная СУБД, полностью написанная на языке Java. В Apache NiFi она используется в качестве базы данных метаданных и хранит информацию о том, какие сегменты существуют, какие им принадлежат элементы и с версиями, а также историю версий для каждого элемента. Эта база данных настраивается в файле nifi-registry.properties по умолчанию, а ее содержимое хранится в файле в локальной файловой системе. JetBrains Xodus — это встроенная база данных без транзакционных схем, написанная на Java и Kotlin. Изначально она была разработана для JetBrains YouTrack, инструмента отслеживания проблем и управления проектами. Xodus также используется в JetBrains Hub, платформе управления пользователями для командных инструментов JetBrains, а также в некоторых внутренних проектах JetBrains. Xodus является транзакционным и полностью поддерживает ACID-требования к транзакциям. Также эта СУБД отлично поддерживает параллелизм и неблокирующие чтения благодаря MVCC-концепции моментальных снимков и настоящей изоляции снимков. Xodus не требует схемы данных, а потому очень гибок. Также эта СУБД не требует миграции схемы или рефакторинга. Будучи встроенной базой данных, Xodus не требует установки или администрирования. СУБД написана на языках Java и Kotlin, бесплатна и распространяется под лицензией Apache 2.0.
Наконец, добавлены расширения для выбора лидеров кластера и управления состоянием на базе Kubernetes.
Освойте администрирование и использование Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники