Apache MiNiFi jest uzupełnieniem środowiska NiFi, które ma za zadanie gromadzenie danych u źródła ich powstania. Charakteryzuje się małym rozmiarem oraz niskim zużyciem zasobów, przez co doskonale sprawdza się we wdrożeniach na urządzeniach z małą ilością zasobów np. Raspberry Pi. W MiNiFi można konstruować proste przepływy danych, które mogą posłużyć do np. przechwytywania danych z czujników źródłowych, systemów lub serwerów i przesłaniu ich do instancji NiFi za pomocą protokołu Site-to-Site.
W przedstawionym przykładzie do instalacji Apache MiNiFi wykorzystam Raspberry Pi w wersji 3 z zainstalowanym systemem Oracle Linux.
Aktualizacja systemu
Instalację przeprowadzamy na uprzednio zaktualizowanym systemie operacyjnym
sudo dnf update -y
Instalacja pakietu Java
Do działania MiNiFi wymagany jest zainstalowany pakiet Java OpenJDK 8 lub 11.
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel
Konfiguracja Apache NiFi
Połączenie Site-toSite
Do połączenia Site-to-Site wykorzystam NiFi, który uruchomiony jest bez SSL, spowodowane jest to tym, że, aby działała komunikacja SSL między NiFi, a MiNiFi potrzebne są certyfikaty ze wspólnego urzędu certyfikacji. Jak to zrobić zostało opisane w artykule Urząd certyfikacji dla środowiska Apache NiFi oraz Bezpieczna komunikacja pomiędzy NiFi, Registry oraz MiNiFi. Instancję NiFi, należy skonfigurować tak, aby umożliwić połączenie Site-to-Site z MiNiFi, w tym celu trzeba edytować plik nifi.properties
# Site to Site properties
nifi.remote.input.host=<nazwa_hosta>
nifi.remote.input.secure=false # w przypadku SSL należy zmienić wartość na true
nifi.remote.input.socket.port=10000
nifi.remote.input.http.enabled=true
nifi.remote.input.http.transaction.ttl=30 sec
nifi.remote.contents.cache.expiration=30 secs
Przejdźmy do zbudowania przepływu danych w NiFi, który umożliwi połączenie Site-to-Site. W tym celu, z górnego menu należy wybrać Input Port oraz Output Port i przeciągnąć na Canvas. W kolejnym kroku z listy procesorów wybieramy GenerateFlowFile i łączymy z Output Portem, ustawiamy jego właściwości tak, aby generował flowfile co 10 sekund. Input Port, polecam połączyć z Funnelem.
Budowa przepływu danych dla MiNiFi
W kolejnym etapie tworzymy Process Group o nazwie MiNiFi, a w nim z menu wybieramy Remote Process Group i konfigurujemy jak poniżej.
Dodałem również procesor UpdateAttribute, który zaktualizuje atrybut o nazwie “isWorks”, aby przetestować połączenie z MiNiFi.
Przepływ danych dla MiNiFi prezentuje się następująco.
Następnie, należy zaznaczyć wszystkie elementy, przytrzymując lewy Shift i prawym przyciskiem myszy zapisać jako szablon.
Tak przygotowany szablon, należy pobrać z NiFi Templates, który znajduje się w hamburger menu, będzie on potrzebny do dalszych kroków.
Instalacja Apache MiNiFi
Do instalacji użyje MiNiFi w wersji 1.15.3, zatem należy pobrać i rozpakować odpowiednią wersję za pomocą poleceń.
sudo wget https://archive.apache.org/dist/nifi/1.15.3/minifi-1.15.3-bin.tar.gz
sudo tar vzxf minifi-1.15.3-bin.tar.gz
sudo ln -s /opt/minifi-1.15.3 /opt/minifi
Dodaj service, który pozwoli poprzez komendę systemctl uruchomić MiNiFi.
sudo bin/minifi.sh install
Z racji tego, że MiNiFi wymaga konwersji wcześniej przygotowanego flow z postaci.xml do .yml, wymagany jest MiNiFi Toolkit.
sudo wget https://archive.apache.org/dist/nifi/1.15.3/minifi-toolkit-1.15.3-bin.tar.gz
sudo tar vzxf minifi-toolkit-1.15.3-bin.tar.gz
sudo ln -s /opt/minifi-toolkit-1.15.3 /opt/minifi-toolkit
Wcześniej pobrany szablon, należy przesłać na urządzenie z MiNiFi do katalogu /opt/minifi-toolkit, a następnie przekonwertować do postaci.yml, następującym poleceniem.
sudo bash bin/config.sh transform MiNiFi.xml config.yml
W pliku config.yml, należy edytować dwie wartości key oraz algorithm w Sensitive Props, można je skopiować z konfiguracji NiFi.
Sensitive Props:
key: plEIDJtwFvs+DJWoxUWlu4e2f80PRMLb
algorithm: NIFI_PBKDF2_AES_GCM_256
Poprawnie przekonwertowany szablon, należy przenieść do katalogu /opt/minifi/conf i uruchomić MiNiFi za pomocą komendy systemctl.
sudo mv /opt/minifi-toolkit/config.yml /opt/minifi/conf
sudo systemctl daemon-reload
sudo systemctl start nifi-registry
sudo systemctl enable nifi-registry
Przepływ można przetestować uruchamiając GenerateFlowFile, który został dodany na głównym widoku w Apache NiFi. Wygenerowany flowfile zostanie przesłany do MiNiFi, a następnie wróci do NiFi z dodatkowym atrybutem itWorks