Обзор MiNiFi
Возможности MiNiFi
MiNiFi — подпроект, дополняющий функциональные возможности NiFi. MiNiFi предоставляет возможность сбора данных в наиболее удаленных периферийных устройствах, где невозможно установить полноценный NiFi Server, например: вышки сотовой связи, устройства доступа к сети, маршрутизаторы и т.д. Сбор данных непосредственно у источника снижает вероятность потери данных при передаче.
Для обеспечения легковесности в MiNiFi отсутствуют многие функции, присутствующие в NiFi. Так, например, из-за отсутствия пользовательского интерфейса в MiNiFi построение потока данных может быть осуществлено только в полноценном NiFi для создания шаблонов, которые будут использованы в MiNiFi.
Архитектура
Ниже на рисунке показана архитектура MiNiFi.
Работа MiNiFi основана на построении настраиваемого потока данных NiFi. Множество агентов (MiNiFi Agent) собирают данные от датчиков или других устройств (например, через протокол MQTT) и передают их в поток при помощи специально настроенных процессоров (например, ConsumeMQTT). После создания потока данных и добавления необходимых атрибутов для FlowFile (параметры датчика, локация и т.д.) при помощи удаленной группы процессов (Remote Process Group) данные отправляются в основной экземпляр NiFi.
C2 Server
MiNiFi C2 Server — центральный сервер, управляющий конфигурацией и работой множества агентов через протокол C2. MiNiFi C2 Server устанавливается на сервер, который должен быть доступен с агентов MiNiFi. Может быть использовано несколько серверов C2 для сложных сетевых структур.
Ниже описаны основные функции MiNiFi C2 Server:
-
Сервер отслеживает heartbeat-сообщения от агентов и в ответ при необходимости отправляет команды на обновление или запись конфигурации потока.
-
У каждого нового агента сервер запрашивает манифест (все предварительно установленные конфигурации, процессоры и службы контроллера). Манифест агента используется в протоколе C2 для проектирования потока для класса агента — группы агентов с одинаковыми манифестами.
-
Сервер управляет конфигурациями потоков MiNiFi и публикует их через собственный REST API. Агенты могут соединяться с этим API для обновления собственной конфигурации через периоды времени, определяемые параметром
nifi.minifi.notifier.ingestors.pull.http.period.ms
.Конфигурация потока представляет собой YML-файл (config.yml) и может быть создана вручную. Так как этот способ является трудоемким, наиболее часто используется поток, созданный при помощи пользовательского интерфейса NiFi и сохраненный как шаблон в формате XML-файла. Доступ MiNiFi C2 Server к шаблонам осуществляется через NiFi REST API. В YML-формат шаблон может быть преобразован при помощи утилиты
minifi-toolkit
. Имя шаблона, как правило, соответствует имени класса агента.
MiNiFi Agent
MiNiFi Agent — агент, запускающий потоки данных и представляющий, по сути, облегченную версию NiFi.
Ниже описаны основные функции MiNiFi Agent:
-
В ответ на heartbeat-сообщения агент получает от сервера C2 команду на обновление конфигурации.
-
Агенты отправляют подтверждение всех управляющих команд, полученных от сервера по протоколу C2.
-
Агент загружает поток, используя REST API сервера. Для указания класса агента используется параметр
nifi.minifi.notifier.ingestors.pull.http.query
. -
Агент применяет новый поток и отправляет собранные данные по протоколу Site-to-Site на экземпляр удаленного NiFi Server, используя удаленную группу процессов (Remote Process Group).
Реализация MiNiFi
MiNiFi доступна в двух вариантах:
-
MiNiFi C++ — представляет собой двоичный файл, потребляет мало системной памяти, но может запускать ограниченное подмножество процессоров NiFi.
-
MiNiFi Java — содержит большинство доступных процессоров NiFi, но представляет собой более крупный двоичный дистрибутив и потребляет больше системных ресурсов.
MiNiFi в ADS
Сервис MiNiFi в кластере ADS может быть установлен только одновременно с сервисом NiFi или при условии, что NiFi уже установлен.
После добавления и установки сервиса MiNiFi в составе кластера ADS для каждого компонента сервиса автоматически устанавливаются параметры:
-
Для компонента MiNiFi C2 Server в файле /etc/minifi-c2/conf/minifi-c2-context.xml устанавливается адрес API экземпляра NiFi, установленного в этом же кластере ADS, при помощи которого будут загружены шаблоны потоков (
http://<hostname>:9090/nifi-api
). -
Для компонента MiNiFi Agent в файле /etc/minifi/conf/bootstrap.conf автоматически устанавливаются параметры для обновления конфигураций потоков и связи с MiNiFi C2 Server, а также загружается текущая конфигурация потока (если она имеется) в файл /etc/minifi/conf/config.yml.
Настройка параметров и изменение параметров, заданных по умолчанию, выполняется на странице конфигурирования сервиса MiNiFi в интерфейсе ADCM.
Для подключения к экземпляру NiFi по протоколу Site-to-Site для сервиса NiFi установлены параметры, отвечающие за удаленное подключение (с префиксом nifi.remote
) в файле /etc/nifi/conf/nifi.properties.
Описания параметров приведены в разделах MiNiFi и NiFi статьи Конфигурационные параметры ADS.
После изменения параметров при помощи интерфейса ADCM перезагрузите сервис. Для этого примените действие Restart, нажав на иконку
в столбце Actions.