Долгожданный релиз Apache NiFi 2.0: что нового?

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

Недавно мы писали об анонсированных новинках 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 в Москве:

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

Источники

  1. https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version2.0.0-M1
  2. https://cwiki.apache.org/confluence/display/NIFI/Migrating+Deprecated+Components+and+Features+for+2.0.0
  3. https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&version=12339599

Поиск по сайту