18 августа 2023 года вышел очередной релиз Apache NiFi. Смотрим, какие проблемы устранены в этом выпуске, знакомимся с обновлениями коннекторов, а также прочими изменениями в NiFi 1.23.1.
Apache NiFi 1.23.1: главные новости
Apache NiFi 1.23.1 не зря назван отладочным выпуском. В нем нет ни одной новой фичи, однако, исправлено 11 ошибок и обновлено 32 зависимости, начиная от коннекторов к MySQL и заканчивая Java-компонентами. Также добавлена поддержка языка выражений в свойстве SegmentSize и обработка прокси в Azure Storage Credentials Services. Улучшена валидация свойств соединения компонентов, а классы JsonRecordSource и JsonSchemaInference перемещены из nifi-record-serialization-services в модуль nifi-json-record-utils, чтобы другие модули могли использовать эти классы (без зависимости от nifi-record-serialization-services, которые предоставляют компоненты, что может привести к двойному раскрытию).
Также в новой версии NiFi исправлена ошибка, связанная с тем, что процессор PutBigQuery, который записывает содержимое FlowFile в таблицу Google BigQuery, не мог обрабатывать некоторые типы данных, такие как NUMERIC и BigDecimal. Напомним, процессор PutBigQuery основан на записи и полагается на API записи на основе gRPC с использованием формата Protobuf. При потоковой передаче добавленные в поток данные мгновенно становятся доступны в BigQuery для чтения. Можно настроить, сколько записей (строк) должно быть добавлено одновременно. Для каждого Flow File устанавливается только один поток, который по завершении обработки закрывается, а для следующего FlowFile открывается новый. Аналогично потоковому подходу для каждого FlowFile в пакетном режиме открывается один поток, и к потоку добавляются записи. Однако данные недоступны в BigQuery, пока они не будут зафиксированы процессором в конце обработки FlowFile.
Возвращаясь к ошибке с обработкой данных типа NUMERIC и BigDecimal, процессор PutBigQuery ранее выдавал исключение
Stream processing failed: java.lang.IllegalArgumentException: Wrong object type used with protocol message reflection. Field number: 3, field java type: BYTE_STRING, value type: java.math.BigDecimal
В версии Apache NiFi 1.23.1 это устранено.
Еще одним значимым для дата-инженера улучшением стало исправление ошибки с процессором ListHDFS, который извлекает список файлов из HDFS. Для каждого файла, указанного в HDFS, этот процессор создает FlowFile, представляющий файл HDFS, который необходимо извлечь вместе с FetchHDFS. Этот процессор предназначен для работы на основном узле только в кластере. Если основной узел изменится, новый основной узел продолжит работу с того места, где остановился предыдущий узел, без дублирования всех данных. В отличие от GetHDFS, этот процессор не удаляет данные из HDFS. До Apache NiFi 1.23.1 вызов метода getFileSystem() у объекта FileSystem происходил в блоке try-with-resources, что вызывало закрытие ресурсов файловой системы, поскольку AbstractHadoopProcessor::abstractOnStopped закрывает файловую систему при остановке процессора. Поэтому блок try-with-resources удален из исходного кода.
Также исправлена ошибка с процессором ValidateRecord, который проверяет записи входящего FlowFile по заданной схеме. Все записи, соответствующие схеме, направляются в действительную связь, а записи, не соответствующие схеме, направляются в недопустимую связь. Таким образом, один входящий FlowFile может быть разделен на два отдельных FlowFile, если некоторые записи соответствуют схеме, а другие нет. Любой FlowFile, перенаправляемый в недействительную связь, создает событие ROUTE Provenance Event с заполненным полем Details, чтобы объяснить, почему записи были недействительными. Чтобы получить дополнительное объяснение того, почему записи были недействительными, можно включить ведение журнала на уровне DEBUG для регистратора org.apache.nifi.processors.standard.ValidateRecord.
До NiFi 1.23.1 ValidateRecord неправильно обрабатывал значения перечисления, сравнивая значение String со всем перечислением, а не со списком перечислений, чтобы увидеть, есть ли оно в списке. Сейчас это исправлено, как и ошибка с процессором ListenGRPC, который использовал некоторые устаревшие API-интерфейсы javax.security и не работал на Java 17 при включении SSL. Этот процессор запускает gRPC-сервер и прослушивает указанный порт для преобразования входящих сообщений в FlowFiles. Формат сообщения определяется стандартным IDL gRPC protobuf, предоставляемым NiFi. Поскольку gRPC не предназначен для переноса больших полезных нагрузок, этот процессор следует использовать только тогда, когда размер FlowFile составляет порядка мегабайт. Максимальный размер сообщения по умолчанию составляет 4 МБ.
Разумеется, это не все обновления NiFi 1.23.1: в свежем релизе обновлено множество зависимостей, чтобы использовать более свежие, т.е. более надежные, версии внешних компонентов, таких как коннекторы к СУБД, Java-модули и пр.
В заключение отметим, что из-за рефакторинга кода в Apache NiFi 1.23.0 и 1.23.1 был нарушен один из сценариев ProcessSession::write. Поэтому использовать эти выпуски не рекомендуется. Исправление выпущено в релизе NiFi 1.23.2 от 22 августа 2023 года, о чем мы рассказываем в новой статье.
Узнайте больше про администрирование и использование Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники