Динамическое создание кластера Apache NiFi

в 12:25, , рубрики: big data, flow-based programming, NiFi, Разработка для интернета вещей, метки: ,

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

image Рис. 1. GUI Apache NiFi.

Особенности:

  • Визуальное создание и управление направленными графиками процессоров.
  • Асинхронный, что обеспечивает высокую пропускную способность и естественную буферизацию, даже когда скорость потока и обработки расходятся.
  • Дает возможность создания связанных и слабо-связанных компонентов, которые затем могут быть повторно использованы в других контекстах.
  • Удобная обработка ошибок, которая облегчает работу и поиск проблемных мест.
  • Источники, по которым поступают данные, а также то, как они протекают и обрабатываются, визуально видимы и легко отслеживаются.

Подробнее тут

Настройка кластера Apache NiFi

Для запуска кластера Apache NiFi может использоваться встроенный или внешний Apache Zookeeper, можно задать в настройках conf/nifi.properties. Мы будем использовать встроенный.
image Рис. 2. Схема кластера Apache NiFi

Для настройки кластера Apache NiFi нам нужно как минимум 3 узла, для того чтобы обеспечить кворум. Как правило, рекомендуется запускать ZooKeeper на 3 или 5 узлах. Работа на менее чем 3 узлах обеспечивает меньшую долговечность перед сбоем. Запуск на более чем 5 узлах обычно приводит к большему сетевому трафику, чем это необходимо. Для всех трех экземпляров общие свойства кластера можно оставить с настройками по умолчанию. Однако обратите внимание, что при изменении этих параметров они должны быть одинаковыми для каждого будущего узла кластера.

Для минимальной настройки кластера Apache NiFi необходимо выполнить следующее операции на каждом узле будущего кластера:

  1. задать в nifi.properties необходимые параметры
  2. указать сервера кластера в zookeeper.properties
  3. задать id для Zookeeper у локального узла
  4. указать строку подключения к Zookeeper кластеру в state-management.xml

Опишем каждый шаг более детально

1. Задать в nifi.properties:
nifi.cluster.is.node=true
nifi.cluster.node.address=<local-ip>
nifi.cluster.node.protocol.port=3030
nifi.state.management.embedded.zookeeper.start=true
nifi.remote.input.host=<local-ip>
nifi.web.http.host=<local-ip>
nifi.zookeeper.connect.string=<connect-string>

connect-string список серверов с zk через запятую.
Например: nifi01:2181,nifi02:21818,nifi03:2181

2. В zookeeper.properties прописать сервера кластера:
server.1=<nifi-node1-ip>:2888:3888
server.2=<nifi-node2-ip>:2888:3888
server.3=<nifi-node3-ip>:2888:3888
initLimit=5
syncLimit=2

3. Задать id в файле ./state/zookeeper/myid, если локальный узел является частью Zookeeper кластера.
4. Прописать в файле state-management.xml строку подключения к кластеру

Для запуска Apache NiFi на каждом узле достаточно запустить команду:

bin/nifi.sh start

При этом не важно в какой последовательности будет запущен Apache NiFi на каждом из узлов. Отслеживать процесс запуска кластера можно по файлу logs/nifi-app.log

Запуск локального кластера в виртуальной среде

Для изучение работы с кластером нам необходима возможность локального запуска кластера Apache NiFi в виртуальной среде. Для запуска в виртуальной среде были использованы Hashicorp Vagrant и Oracle VM VirtualBox. Необходимо установить плагины vagrant-vbguest и vagrant-hostmanager. Для ускорения и облегчения процесса запуска были написаны специальные скрипты vagrant provision, которые позволяют запустить кластер Apache NiFi в виртуальной среде одной командой:

vagrant up

После запуска, в течении пяти-семи минут, в браузере будет доступен пользовательский интерфейс по адресу localhost:8080/. Так же, можно проверить, открыв VirtualBox, должны быть видны три виртуальных машины под управлением nifi01, nifi02 и nifi03.

Исходники скриптов провизии vagrant для запуска кластера NiFi доступны на github.

Динамическое формирование кластера

В некоторых ситуациях, необходимо, чтобы подключаемое устройство само находило кластер в сети и подключалось к нему. Для этих целей была написана программа «агент», которая выполняет поиск устройств в сети, и при нахождении кластера (проверяет через Apache NiFi REST API) подключается к нему. Исходники данной программы доступны на github.

Пример запуска агента:

java -cp cluster-joiner-0.0.1-jar-with-dependencies.jar ru.itis.suc.NodeAgent /home/user/nifi/nifi-1.2.0 8085

где аргументы путь к Nifi и порт, который агент будет слушать при необходимости создания нового кластера.

После запуска, будет произведен поиск кластера в локальной сети и подключение к нему. В случае если кластер не найден, будет попытка создания кластера, если найдутся еще 2 устройства готовые стать частью нового кластера.

Динамическое создание кластера Apache NiFi - 3
Рис. 3. GUI Apache Nifi запущенного в кластере.

Динамическое создание кластера Apache NiFi - 4
Рис. 4. Список узлов кластера.

Заключение

Данная работа была проделана в целях эксперимента и проверки возможности автоматического создания кластера Apache NiFi в локальной сети.

Конечно, были использованы примитивные алгоритмы для поиска и подключения, однако целью работы была только проверка подобной возможности.

Автор: DeFacto

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js