Apache NiFi — что это?
Apache NiFi — это программный продукт с открытым исходным кодом, написанный на языке Java и предназначенный для управления и автоматизации потока данных между системами. Другими словами, этот продукт позволяет организовать ETL-процессы (ETL — extract, transform, load; извлечение, преобразование, загрузка). Apache NiFi позволяет создавать, отслеживать и управлять потоком, а также задавать правила для обработки информации через интуитивно понятный веб-интерфейс.
При разработке программного обеспечения акцент был сделан на простоте использования, надежности и гибкости инструмента, что и сделало его популярным решением для обработки больших объемов данных.
Изначально проект разрабатывался NSA и назывался Niagara Files, но в 2014 году был передан в Apache Software Foundation и стал open source проектом.
Архитектура и особенности Apache NiFi
Перед тем как рассмотреть архитектуру инструмента, стоит изучить несколько его компонентов:
- FlowFile — представляет объект данных, перемещающихся через систему. Включает в себя набор атрибутов (метаданных) и содержимое данных;
- FlowFile Processor — можно сказать, основная рабочая единица в NiFi. Процессор может выполнять определенные операции над данными (преобразование, маршрутизация и другие);
- Connection — обеспечивает связь между процессорами и определяет маршрутизацию FlowFile между ними;
- Flow Controller — управляет потоками и их распределением между процессорами;
- Process Group — группа процессоров и их подключений, позволяющая преобразовать сложные компоненты в более управляемые и понятные структуры.
Архитектура продукта построена на следующих элементах:
- Web Server — обеспечивает веб-интерфейс и выполнение различных операций с помощью HTTP-запросов;
- Flow Controller — управляет потоками и координирует их работу;
- Extensions — компоненты, расширяющие функциональность ПО, они работают внутри JVM;
- FlowFile Repository — здесь хранятся метаданные всех FlowFile (их атрибуты, указатель на фактическое содержимое и текущее состояние), которые в данный момент существуют в системе;
- Content Repository — здесь хранится фактическое содержимое FlowFile, в отличие от FlowFile Repository, который содержит метаданные. Этот репозиторий обычно самый большой из трех;
- Provenance Repository — здесь хранится история каждого FlowFile: когда для какого-либо FlowFile происходит событие (создание, клонирование, модификация и другие), данные об этом событии вносятся в Provenance Repository.
Возможности инструмента
Apache NiFi обладает широким набором возможностей, некоторые из которых представлены ниже:
- поддержка сбора данных из различных источников — файлы разных форматов, базы данных, облачные сервисы и другие;
- сотни процессоров для разных операций над данными — фильтрация, нормализация, агрегация и так далее, также пользователи могут создавать свои процессоры;
- поддержка концепции очередей и обратного давления;
- пакетная и потоковая обработка данных, отслеживание и управление (расстановка приоритетов, контроль распределения нагрузки) потоками данных в режиме реального времени;
- интеграция с внешними системами — реляционными и NoSQL базами данных, AWS, Azure, Kafka и другими;
Преимущества и недостатки Apache NiFi
Рассмотрим достоинства продукта:
- простота использования — удобный и понятный веб-интерфейс позволяет без лишних усилий создавать и управлять потоками данных;
- возможности для горизонтального масштабирования, что увеличивает объем данных, которые могут быть обработаны;
- множество изменяемых параметров, что позволяет настроить инструмент под конкретные/уникальные потребности;
- поддержка различных функций безопасности (контроль доступа, шифрование и другие);
- возможность отслеживания данных по мере их перемещения по системе (то есть отслеживать изменения их содержимого и атрибутов).
К минусам инструмента можно отнести:
- необходимость тщательного изучения документации для выполнения качественной настройки параметров;
- нехватку подробной документации для решения сложных и нестандартных задач;
- потребление большого количества ресурсов и низкую производительность в отдельных случаях — для обеспечения оптимальной производительности требуется грамотная настройка.
Где и для чего используется
Apache NiFi может использоваться в любых сферах, где требуется сбор (в особенности из разных источников) и какая-либо обработка данных: подготовка данных для машинного обучения (ML), сбор и агрегация данных с IoT-устройств, подготовка больших объемов данных к анализу (может применяться, например, в бизнес-аналитике), анализ потоковых данных для обнаружения закономерностей (например, для определения мошенничества), организация обмена данными между различными системами и так далее.
Как установить и начать работать с Apache NiFi
Перед тем как установить продукт, необходимо проверить соответствие минимальным системным требованиям для его установки и запуска. Для того чтобы увидеть информацию об установленной версии Java, нужно ввести команду java -version. Если Java не установлена, то скачать JDK можно с официальных ресурсов (Oracle, OpenJDK). Когда все требования соблюдены, можно переходить к установке:
- С официального сайта необходимо загрузить нужную версию программы. Представлено два формата упаковки: .zip (для Windows) и tar.gz (для Linux и macOS).
- Скачанный архив нужно распаковать в желаемый каталог (для Windows можно использовать любые инструменты, например, WinRAR). После этого при необходимости можно изменять параметры: добавлять пользователей и настраивать их права доступа, вносить изменения в каталог conf, настраивать параметры JVM и так далее.
- Далее можно запустить Apache NiFi. Пользователям Windows нужно перейти в папку, куда был установлен продукт, и найти там папку с названием bin, а затем кликнуть на файл run-nifi.bat — это запустит программу. Для того чтобы завершить работу, используется сочетание клавиш Ctrl+C. Пользователям Linux нужно перейти в каталог, куда была установлена программа (использовать нужно окно терминала) и выполнить команду bin/nifi.sh start. Для завершения работы также используется сочетание клавиш Ctrl+C. Чтобы запустить работу в фоновом режиме, нужно выполнить команду bin/nifi.sh start, тогда для завершения используется команда bin/nifi.sh stop. Чтобы узнать текущий статус работы, нужно выполнить команду bin/nifi.sh status.
- В браузере нужно перейти по адресу https://localhost:8443/nifi (8443 — это порт по умолчанию, его можно изменить в файле nifi.properties каталога conf). Затем отобразится экран авторизации, где нужно будет ввести логин и пароль. Эти данные можно найти в каталоге, куда программа была установлена, в logs/nifi-app.log. Логин и пароль можно изменить, для этого сначала нужно завершить работу программы, а затем в каталоге установки выполнить команду ./bin/nifi.sh set-single-user-credentials <username> <password>.
- Далее станет доступен пользовательский интерфейс, в котором можно непосредственно начинать работу: добавлять и настраивать процессоры, создавать соединения и так далее. Подробная информация о том, как начать работу представлена в этом разделе гайда от команды разработчиков Apache NiFi.