Обзор NiFi
Функции
NiFi — платформа, созданная для автоматизации управления потоками данных между системами.
Основные функциональные возможности NiFi перечислены ниже:
-
Управление потоками данных при помощи использования специальных процессоров, каждый из которых имеет свое функциональное назначение. При этом для обеспечения доступности данных, гарантии доставки данных и устойчивости при обработке перезагрузок и неожиданных сбоев системы поддерживаются следующие функции:
-
Использование журнала упреждающей записи (Write-Ahead Log), который регистрирует каждое изменение, происходящее с обьектом потока данных (FlowFile) в качестве транзакционной единицы и фиксирует успешное изменение метаданных в репозитории FlowFile, а в случае сбоя системы восстанавливает свое состояние.
-
Возможность гибкой настройки буферизации данных в очереди с применением backpressure при достижении очередью определенных параметров.
-
Возможность настройки схем приоритизации обработки данных из очереди.
-
-
Функции, обеспечивающие простоту управления потоками:
-
Пользовательский интерфейс NiFi предоставляет возможность визуально создавать потоки данных и управлять ими в режиме реального времени. Для создания новых компонентов в системе или внесения изменения в существующие нет необходимости останавливать все компоненты.
-
Шаблоны потоков позволяют создавать и обмениваться проектами потоков.
-
Хранение в репозитории Data Provenance информации о происхождении данных и всех операций, которым они были подвергнуты при прохождении через систему. Это позволяет проводить анализ системы на соответствие заданным требованиям, а также оптимизацию и устранение неполадок.
-
Возможность просмотра контента, сохраненного в репозитории контента в любой момент цикла обработки потока.
-
-
Функции, обеспечивающие безопасность системы:
-
Возможность использования протоколов с шифрованием (двусторонний SSL) при передачи данных между двумя системами.
-
NiFi поддерживает аутентификацию SSL и обеспечивает подключаемую авторизацию в пользовательском интерфейсе или при помощи Apache Ranger. Также может быть настроена мультитенантная авторизация, позволяющая проводить настройку для групп пользователей доступа к разным частям потока данных с различными уровнями авторизации.
-
-
Возможности расширений:
-
NiFi предоставляет возможность подключения расширений через следующие точки: процессоры, службы контроллера, задачи отчетности, приоритизаторы и пользовательские интерфейсы клиентов.
-
Ограниченный набор зависимостей для создания расширений и применение собственной модели загрузчика классов NiFi.
-
Возможность соединенияя между экземплярами NiFi при помощи протокола связи Site-to-Site (S2S), что обеспечивает безопасную и эффективную передачу данных, а также использование библиотек расширений для передачи данных.
-
-
Масштабирование:
-
NiFi осуществляет масштабирование за счет кластеризации нескольких узлов. Это позволяет настраивать балансировку потоков и аварийное переключение между узлами.
-
Регулирование пропускной способности может быть выполнено при помощи изменения количества задач на вкладке SCHEDULING при настройке процессора.
-
Архитектура
Основные компоненты узла NiFi
NiFi выполняется внутри JVM в операционной системе хоста.
Компоненты узла NiFi представлены на следующей схеме.
Узел NiFi содержит следующие компоненты:
-
Веб-сервер (Web Server) — сервер, принимающий HTTP-запросы от клиентов для управления потоками NiFi и выдающий результат в виде демонстрации изменений потока визуально (при помощи пользовательского интерфейса) или HTTP-ответов.
-
FlowFile — объект NiFi, представляющий собой информационный пакет, перемещающийся через систему. Для каждого пакета NiFi отслеживает атрибуты в виде пар ключ/значение и связанное с пакетом содержимое (content).
-
Процессор (Processor) — компонент NiFi, выполняющий заявленные в своей функции действия, связанные с обработкой данных FlowFiles, например, извлечение или публикацию данных. Процессоры могут использовать один или несколько FlowFiles. Процессоры имеют доступ к атрибутам данного FlowFile и его содержимого.
-
Расширения (Extension) — библиотеки, увеличивающие или изменяющие функционал обьекта и загружаемые во время запуска точек расширения. Расширения в NiFi запускаются и выполняются внутри JVM. Точки расширения включают в себя: процессоры, службы контроллера, задачи отчетности, приоритизаторы и пользовательские интерфейсы клиентов.
-
Контроллер потока (Flow Controller) — компонент NiFi, выполняющий функции управления обменом FlowFiles между процессорами и управление запуском расширений. Контроллер потока может быть настроен для управления определенным набором потоков.
-
Репозитории NiFi — репозитории, хранящие данные для работы потоков NiFi. Репозитории представляют собой каталоги в локальном хранилище узла NiFi:
-
FlowFile Repository — репозиторий, который содержит метаданные для всех текущих FlowFile в потоке, отслеживающие весь путь прохождения FlowFile в системе. Реализация репозитория является подключаемой. По умолчанию для хранения данных используется журнал упреждающей записи. Путь расположения репозитория на диске указывается при помощи параметра
nifi.flowfile.repository.directory
. -
Content Repository — репозиторий, в котором содержатся фактические байты содержимого данного FlowFile. Реализация репозитория является подключаемой. По умолчанию репозиторий представляет собой механизм, который хранит блоки данных в файловой системе. Путь расположения репозитория на диске указывается при помощи параметра
nifi.content.repository.directory
. Можно указать более одного места хранения файловой системы. -
Provenance Repository — репозиторий, в котором содержатся все данные о происхождении событий, история FlowFiles. Данные о событиях в каждом месте индексируются и доступны для поиска. Реализация репозитория является подключаемой. Путь расположения репозитория на диске указывается при помощи параметра
nifi.provenance.repository.directory
. Можно указать один или несколько томов физического диска.
-
Архитектура кластера NiFi
Начиная с версии 1.0 в NiFi используется парадигма кластеризации с нулевым лидером (Zero-Leader Clustering), в которой нет единого лидера системы, и соответственно, нет единой точки отказа.
Для координации работы узлов NiFi в распределенной системе (в кластере) используется ZooKeeper, который обеспечивает доступность данных потока в случае сбоев или технического обслуживания узлов.
ПРИМЕЧАНИЕ
|
На рисунке ниже показано, как взаимодействуют узлы NiFi друг с другом и с ZooKeeper в кластере.
Когда узлы NiFi запускаются в составе кластера, каждый из них регистрирует себя в ZooKeeper — создает эфемерный узел ZooKeeper (znode), который указывает идентификатор узла, имя хоста и порт. ZooKeeper отслеживает доступность узлов.
Изменения в поток NiFi могут быть внесены менеджером потока данных (DataFlow Manager, DFM) через страницу пользовательского интерфеса NiFi или при помощи подключения к веб-серверу узла NiFi (например, используя NiFi REST API). При этом DFM может использовать любой узел из состава кластера. Каждое внесенное изменение реплицируется на все подключенные узлы кластера.
ZooKeeper в соответствии с протоколом алгоритма консенсуса ZAB (ZooKeeper Atomic BroadCast) производит выборы ключевых узлов кластера:
-
Координатор кластера (Cluster Coordinator) — узел в кластере NiFi, который выполняет следующие операции в кластере NiFi:
-
Обработка сигналов heartbeat, при помощи которых узлы кластера сообщают информацию о своем состоянии, и отключение узлов, от которых не поступает сигнал heartbeat в течение времени, указанного в параметре
nifi.cluster.protocol.heartbeat.interval
(значение по умолчанию5 с
). -
Предоставление текущего актуального потока новым присоединяющимся узлам (решение о возможности присоединения узла принимается на основе настроенного файла брандмауэра nifi.cluster.firewall.file).
-
Определение корректной версии потока при запуске кластера NiFi при помощи механизма выборов потока (leader election) — голосования по потокам узлов. При этом сравниваются версии потоков разных узлов и при совпадении потоков двух узлов за этот поток отдается голос. Выборы потока регулируются параметрами
nifi.cluster.flow.election.max
иnifi.cluster.flow.election.max.wait.time
. На узле, поток которого конфликтует с потоком "победившего на выборах" узла, создается резервная копия файла конфигурации потока flow.xml.gz (место хранения файла — в соответствии с параметромnifi.flow.configuration.file
), а сам файл заменяется файлом "правильного потока". -
Согласование потока на всех узлах. Все веб-запросы от каждого узла пересылаются координатору, который затем реплицирует этот запрос на все узлы кластера.
-
-
Основной узел (Primary Node) — узел, на котором можно запустить изолированные процессоры (isolated processors), работа которых выполняется только на одном узле кластера. По умолчанию в кластере NiFi один и тот же поток данных работает на всех узлах. В ситуации, когда процессор обрабатывает файлы из удаленного каталога, может потребоваться ограничить передачу данных одним каналом во избежание ошибок при дублировании данных. Включение "изолированности" процессора производится при помощи параметра Execution на вкладке SCHEDULING при настройке процессора.
Координатор кластера и основной узел отображаются на странице Cluster глобального меню пользовательского интерфейса.
ZooKeeper отслеживает доступность узлов и автоматически выбирает новых координатора кластера и основной узел, если прежние становятся недоступными. Также из ZooKeeper все узлы получают ID координатора кластера для отправления сигналов heartbeat.
Настройка NiFi
После добавления и установки сервиса NiFi в составе кластера ADS настройка параметров выполняется на странице конфигурирования сервиса NiFi в интерфейсе ADCM.
Для настройки параметров backpressure раскройте узел Main в дереве конфигурационных настроек и введите новые значения для параметров.
Для изменения мест хранения репозиториев NiFi раскройте узел Directories в дереве конфигурационных настроек и введите новые значения для параметров.
Для настройки параметров работы кластера переведите в активное состояние переключатель Show advanced, раскройте узел nifi.properties и введите новые значения для параметров. Для изменения параметров NiFi, отсутствующих в интерфейсе ADCM, используйте поле Add key,value в узле nifi.properties. Выберите Add property и введите наименование параметра и его значение.