Apache NiFi 1.15.3: что нового?

Автор Категория ,
Apache NiFi 1.15.3: что нового?

Недавно мы писали про декабрьский релиз Apache NiFi. Спустя месяц, 18 января 2022 года сообщество выпустило новую версию фреймворка – 1.15.3 с аутентифицированным доступом к SFTP-серверам через прокси-серверы SOCKS и улучшенным потреблением памяти. Разбираем 9 исправленных багов и 2 улучшения, а также особенности миграции на свежий выпуск.

Снова про библиотеки логирования и Log4Shell: 2 улучшения в Apache NiFi 1.15.3

Оба улучшения в Apache NiFi 1.15.3 связаны с критической уязвимостью Log4Shell, случившейся в декабре прошлого года. В частности, API Log4j 2 обновлен до версии 2.17.1, т.к. некоторые компонентов фреймворка используют библиотеки Log4j 2 log4j-api и log4j-to-slf4j. Хотя они считаются не подверженным тем же проблемам безопасности, что и log4j-core, обновление до версии 2.17.1 снижает вероятность ложных срабатываний. Также обновлена до версии 1.2.10 написанная на Java библиотека журналирования LogBack — система протоколирования, представляющая собой развитие log4j и специально разработанная для использования совместно с slf4j.

При переходе с версии 1.14 на 1.15 стоит помнить, что NiFi требуется Java 8 с обновлением 251 или новее для поддержки нового стандартного алгоритма подписи JSON Web Token PS512, который использует RSASSA-PSS с SHA-512 и MGF1 с SHA-512.

Исправленные ошибки

В свежем выпуске устранено зависание тестов SFTP (TestListSFP и TestPutSFTP) на некоторых платформах Linux, таких как Ubuntu 20, где модульные тесты очень долго запускались или полностью останавливались. Проблема решена обновлением Apache SSHD с версии 1.7.0 до версии 2.8.0 для тестов SFTP в стандартных процессорах NiFi и заменой библиотеки правил fake-sftp-server-rule прямыми ссылками на сервер Apache SSHD.

Исправлена ошибка с процессорами SFTP, которые не работали с аутентифицированным прокси-сервером SOCKS из-за того, что используется не тот пользователь, что указан в конфигурации, а системный. Класс java.net.Authenticator не поддерживал предоставление учетных данных имени пользователя и пароля прокси-сервера для отдельных экземпляров java.net.Proxy, требуя использовать экземпляр Authenticator для всей JVM с использованием метода Authenticator.setDefault(). Этот подход не подходит для компонентов NiFi, которым могут потребоваться разные наборы учетных данных для разных экземпляров компонента. Поэтому добавлена ​​поддержка аутентифицированного доступа к SFTP-серверам через прокси-серверы SOCKS с помощью интеграции BrokeredSocketFactory из библиотеки socketbroker. Аналогично устранена ошибка ListSFTP с использованием прокси-сервера HTTPS с проверкой подлинности. Про аутентификацию пользователей Apache NiFi читайте в нашей следующей статье.

Устранено чрезмерное потребление памяти кучи процессором ExecuteSQLRecord при использовании с драйвером JDBC PostgreSQL. Когда куча заполнена, сборщик мусора пытается очистить память, блокируя другие потоки. Это исправляет ошибку, связанную с тем, что NIFI потребляет большое пространство кучи при запросе больших наборов данных (миллионы или миллиарды записей) через JDBC-драйвер PostgreSQL. Ошибка вызвана тем, что JDBC-драйвер PostgreSQL по умолчанию собирает сразу все результаты запроса. Такое поведение приводит к тому, что процессоры ExecuteSQL и ExeccuteSQLRecord используют большую кучу. Кэширование небольшого количества записей, которое определяется размером выборки на стороне клиента соединения и извлечение следующего блока данных при исчерпании возможно только в том случае, если для автоматической фиксации установлено значение false.

Исправлен сбой, связанный с профилями сборки, которые включают запрещенную зависимость от общих журналов, когда такой журнал общих ресурсов отсутствует.

Также исправлена ошибка со сборкой Maven RPM, когда она не может произвести рабочую установку NiFi из-за несовместимости ряда операторов include/exclude package для организации результирующего каталога lib. В новом выпуске операторы пакета одним оператором, чтобы включить в RPM содержимое каталога lib, которое уже было создано сборкой.

Устранена ошибка с процессором ConsumeGCPubSub, возникшая после обновления в релизе Apache NiFi 1.15.2. Теперь удалены Google GRPC библиотеки google-cloud-pubsublite из процессоров nifi-gcp для ветки поддержки NiFi 1.15, чтобы избежать конфликтов классов во время выполнения.

Исправлена ошибка с классом NonFlushableOutputStream, который используется при вызове ProcessSession.append. Он наследуется от класса FilterOutputStream, но не переопределяет методы записи, хотя должен делать это. В результате вызовы NonFlushableOutputStream.write(byte[]) или NonFlushableOutputStream.write(byte[], int, int) не делегируют эти вызовы базовому классу OutputStream, а вместо этого перебирают каждый байт в заданном массиве, вызывая метод write(int) для каждого байта отдельно, что неэффективно.

Наконец, исправлены ошибки автоматической сборки GitHub в Ubuntu JDK 11 за счет удаления ненужных тестовых зависимостей logback-classic из nifi-bootstrap и nifi-bootstrap-utils. Эта библиотека конфликтовала с тестовой зависимостью slf4j-simple по умолчанию, вызывая сбои с плагином maven-surefire-plugin.

А в марте 2022 года вышел новый релиз фреймворка – 1.16.0, о котором мы рассказываем в новой статье.

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

Источники

  1. https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version1.15.3
  2. https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&version=12351203
  3. https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance