Poniższy poradnik zawiera szczegółowy opis kroków jakie trzeba wykonać, aby poprawnie zainstalować i uruchomić środowisko Apache NiFi w wersji 1.15.3. W tym celu został użyty darmowy system Rocky Linux w wersji 8.5, który jest klonem popularnej dystrybucji Red Hat Enterprise Linux. Podczas, gdy Red Hat poinformował o końcu CentOS Linux, założyciel wspomnianej dystrybucji Gregory Kurtzer ogłosił powstanie nowej darmowej wersji RHEL, która zastąpi CentOS, czyli Rocky Linux.
Aktualizacja systemu
Przechodząc do instalacji i konfiguracji Apache NiFi, w pierwszej kolejności wymagane jest zaktualizowanie systemu operacyjnego, dlatego należy uruchomić następujące polecenia, które uaktualnią dystrybucję, a następnie uruchomią ponownie.
sudo dnf update -y && sudo shutdown -r now
Warto również zainstalować dodatkowe pakiety, które wykorzystane zostały w tym artykule.
sudo dnf install nano wget
Konfiguracja systemu
Gdy już mamy aktualny system oraz repozytoria należy przejść do kolejnego kroku, który zawiera dobre praktyki, aby uzyskać najlepsze rezultaty w kwestii wydajności środowiska. Jest to krok opcjonalny, ale osobiście zalecam wykonanie tych czynności, ponieważ aplikacja jaką jest NiFi intensywnie korzysta z IO maszyny, a przedstawiona niżej konfiguracja pozwoli na jego prawidłową pracę. Poniższa konfiguracja została zaczerpnięta z oficjalnej dokumentacji NiFi.
Selinux
Wyłączymy selinux, aby nie stwarzał problemów aplikacji NiFi, w tym celu należy w 6 linijce zmienić wartość enforcing na disabled.
sudo nano /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
File Handles & Forked Processes
Zwiększenie wydajności środowiska możemy zacząć od zwiększenia ilości limitów systemowych, w tym celu należy dokonać edycji pliku systemowego i wkleić na koniec pliku wskazane niższej parametry.
sudo nano /etc/security/limits.conf
* hard nofile 50000
* soft nofile 50000
* hard nproc 10000
* soft nproc 10000
TCP socket ports & TIMED_WAIT
Zaleca się ustawienie poniższy parametrów poprzez wydanie poleceń w powłoce BASH, w celu optymalizacji ustawień sieciowych.
sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
sudo sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait="1"
SWAP
Dla aplikacji jaką jest NiFi nie jest wskazane używanie pamięci SWAP, więc należy edytować plik /etc/sysctl.conf i dodać poniższy parametr na koniec pliku.
sudo nano /etc/sysctl.conf
vm.swappiness = 0
Partition atime
Polecam nie wykorzystywać partycji systemowej na instalację NiFi, a utworzyć dedykowaną partycję z parametrem noatime, który znacząco podnosi wydajność i przepustowość, w tym celu należy edytować plik /etc/fstab. Zamieszczam krótki przewodnik, w jaki sposób dodałem volume group i physical volume z użyciem dysku /dev/sdb.
sudo pvcreate /dev/sdb
sudo vgcreate datavg /dev/sdb
sudo lvcreate -l +100%FREE -n datalv datavg
sudo mkfs.xfs /dev/datavg/datalv
sudo mkdir /data
Kolejnym krokiem jest zamontowanie udziału w wyznaczony punkt montowania z parametrem noatime.
sudo nano /etc/fstab
/dev/datavg/datalv /data xfs defaults,noatime 1 1
sudo mount -a
Końcowy efekt powinien wyglądać następująco.
W ostatnim kroku, aby wprowadzone zmiany zostały użyte należy zrestartować maszynę.
sudo shutdown -r now
Instalacja pakietu Java
Apache NiFi do działania wymaga pakietu Java w wersji 8 lub 11. Do Twojego wyboru pozostawiam, z której wersji skorzystasz, poniżej zamieszczam polecenia, które należy użyć, aby zainstalować wybraną wersję w systemie Rocky Linux.
Java OpenJDK 8
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel
Java OpenJDK 11
sudo dnf install java-11-openjdk java-11-openjdk-devel
Instalacja Apache NiFi
W chwili obecnej zainstaluje najnowszą wersję, czyli Apache NiFi 1.15.3. Natomiast, jeżeli interesuje Ciebie inna wersja to należy wejść poprzez ten link https://nifi.apache.org/download.html, wybrać wersję i pobrać pliki binarne z rozszerzeniem tar.gz. Poleceniem wget pobieramy pliki instalacyjne NiFi, a następnie rozpakowujemy.
sudo cd /data
sudo wget https://archive.apache.org/dist/nifi/1.15.3/nifi-1.15.3-bin.tar.gz
sudo tar vzxf nifi-1.15.3-bin.tar.gz
sudo ln -s /data/nifi-1.15.3 /data/nifi
sudo cd nifi
Po wykonaniu wszystkich powyższych czynności, musimy utworzyć użytkownika oraz hasło jakim będziemy logować się do NiFi.
sudo ./bin/nifi.sh set-single-user-credentials <username> <password>
Domyślna konfiguracja NiFi jest przypisana do adresu lokalnego więc, aby uzyskać dostęp do GUI musimy zmienić ustawienie nifi.web.https.host z 127.0.0.1 na 0.0.0.0 w pliku nifi.properties
sudo nano conf/nifi.properties
nifi.web.https.host=<adres_ip_hosta>
Następnie należy zainstalować service, który pozwoli nam poprzez komendę systemctl uruchomić NiFi.
sudo bin/nifi.sh install
Zalecam stworzyć dodatkową konfigurację do usługi nadpisującą jej limity, w tym celu należy wykonać poniższe polecenia i wkleić zawartość [Service] do pliku override.conf.
sudo mkdir -p /etc/systemd/system/nifi.service.d
sudo nano /etc/systemd/system/nifi.service.d/override.conf
[Service]
LimitNOFILE=50000
LimitNPROC=10000
W ostatnim kroku należy zaktualizować daemon oraz uruchomić NiFi, ostatnie polecenie spowoduje, że NiFi będzie uruchamiany wraz z uruchomieniem maszyny.
sudo systemctl daemon-reload
sudo systemctl start nifi
sudo systemctl enable nifi
W przeglądarce wpisując adres https://adres_ip_maszyny:8443/nifi zostanie załadowany interfejs graficzny Apache NiFi z prośbą o zalogowanie się poświadczeniami, które wcześniej ustawiliśmy.