Apache NiFi установка: Пошаговая инструкция для Linux и Docker | AdminWiki

Apache NiFi установка: Полное руководство для DevOps инженеров

18 декабря 2025 8 мин. чтения #apache nifi #data integration #data pipeline #devops #etl #установка nifi

Представь, что тебе нужно построить надёжный конвейер для обработки данных между различными системами. Apache NiFi — это мощный инструмент с визуальным интерфейсом, который позволяет создавать такие конвейеры без глубокого программирования. В этой статье я, как Senior DevOps, покажу тебе все этапы установки и настройки NiFi — от простого standalone-режима до кластера.

Подготовка к установке Apache NiFi

Перед началом установки убедись, что система соответствует требованиям:

  • Java 8 или выше (рекомендуется OpenJDK 11/17)
  • Минимум 2 ГБ оперативной памяти
  • 2+ ядра процессора
  • Не менее 10 ГБ свободного места на диске
Важно: Для production-среды рекомендуется использовать Java 11 или 17 LTS версии. NiFi 1.x поддерживает Java 8, но более новые версии требуют Java 11+.

Установка Apache NiFi на Linux

Шаг 1: Установка Java

Давай начнём с установки Java. Для Ubuntu/Debian:

bash
# Обновление пакетов
sudo apt update

# Установка OpenJDK 11
sudo apt install -y openjdk-11-jdk

# Проверка версии Java
java -version

# Установка переменной JAVA_HOME
export JAVA_HOME=$(readlink -f /usr/bin/java | sed 's:/bin/java::')
echo "export JAVA_HOME=$JAVA_HOME" >> ~/.bashrc

Шаг 2: Загрузка и распаковка Apache NiFi

Скачаем последнюю стабильную версию с официального сайта:

bash
# Создадим директорию для установки
sudo mkdir -p /opt/nifi
sudo chown $USER:$USER /opt/nifi
cd /opt/nifi

# Загрузка последней версии NiFi (проверь актуальную версию на сайте)
wget https://downloads.apache.org/nifi/1.23.2/nifi-1.23.2-bin.tar.gz

# Проверка контрольной суммы
wget https://downloads.apache.org/nifi/1.23.2/nifi-1.23.2-bin.tar.gz.sha256
sha256sum -c nifi-1.23.2-bin.tar.gz.sha256

# Распаковка архива
tar -xzf nifi-1.23.2-bin.tar.gz

# Создание симлинка для удобства
ln -s nifi-1.23.2 current

# Очистка архива
rm nifi-1.23.2-bin.tar.gz*

Шаг 3: Базовая настройка конфигурации

Основные настройки находятся в файле /opt/nifi/current/conf/nifi.properties. Давай настроим ключевые параметры:

config
# Веб-интерфейс будет доступен на всех интерфейсах
nifi.web.http.host=0.0.0.0
nifi.web.http.port=8080

# Директории для хранения данных
nifi.flowfile.repository.directory=./flowfile_repository
nifi.content.repository.directory.default=./content_repository
nifi.database.directory=./database_repository
nifi.provenance.repository.directory.default=./provenance_repository

# Настройки безопасности (отключим для первого запуска)
nifi.security.keystore=
nifi.security.keystoreType=
nifi.security.keystorePasswd=
nifi.security.keyPasswd=
nifi.security.truststore=
nifi.security.truststoreType=
nifi.security.truststorePasswd=

# JVM настройки (можно изменить в nifi-env.sh)
java.arg.2=-Xms512m
java.arg.3=-Xmx1024m
Внимание: Для production-среды обязательно настройте SSL/TLS и аутентификацию. Не оставляйте NiFi доступным без пароля в интернете!

Шаг 4: Запуск Apache NiFi

Запустим NiFi как foreground-процесс для проверки:

bash
# Переходим в директорию NiFi
cd /opt/nifi/current

# Запуск в foreground режиме
./bin/nifi.sh start

# Просмотр логов в реальном времени
tail -f ./logs/nifi-app.log

# Остановка NiFi
./bin/nifi.sh stop

После запуска открой браузер и перейди по адресу http://ваш_сервер:8080/nifi. Должен появиться интерфейс NiFi.

Установка Apache NiFi через Docker

Docker — отличный вариант для быстрого развёртывания и тестирования. Используем официальный образ:

bash
# Запуск последней версии NiFi
docker run \
  --name nifi \
  -p 8080:8080 \
  -d \
  apache/nifi:latest

# Запуск с монтированием томов для сохранения данных
docker run \
  --name nifi \
  -p 8080:8080 \
  -v ./flowfile_repository:/opt/nifi/nifi-current/flowfile_repository \
  -v ./database_repository:/opt/nifi/nifi-current/database_repository \
  -v ./content_repository:/opt/nifi/nifi-current/content_repository \
  -v ./provenance_repository:/opt/nifi/nifi-current/provenance_repository \
  -d \
  apache/nifi:latest

# Запуск с кастомными настройками JVM
docker run \
  --name nifi \
  -p 8080:8080 \
  -e NIFI_JVM_HEAP_INIT="512m" \
  -e NIFI_JVM_HEAP_MAX="1024m" \
  -d \
  apache/nifi:latest

Docker Compose для NiFi

Для более сложных сценариев создадим docker-compose.yml:

yaml
version: '3.8'

services:
  nifi:
    image: apache/nifi:latest
    container_name: nifi
    ports:
      - "8080:8080"
      - "8443:8443"
    environment:
      - NIFI_WEB_HTTP_PORT=8080
      - NIFI_WEB_HTTPS_PORT=8443
      - NIFI_JVM_HEAP_INIT=512m
      - NIFI_JVM_HEAP_MAX=1024m
    volumes:
      - ./data/flowfile_repository:/opt/nifi/nifi-current/flowfile_repository
      - ./data/database_repository:/opt/nifi/nifi-current/database_repository
      - ./data/content_repository:/opt/nifi/nifi-current/content_repository
      - ./data/provenance_repository:/opt/nifi/nifi-current/provenance_repository
      - ./config/nifi.properties:/opt/nifi/nifi-current/conf/nifi.properties:ro
    networks:
      - nifi-network

networks:
  nifi-network:
    driver: bridge

Настройка Apache NiFi как системного сервиса

Для production-среды настроим NiFi как systemd сервис:

bash
# Создаём файл сервиса
sudo nano /etc/systemd/system/nifi.service
config
[Unit]
Description=Apache NiFi
After=network.target

[Service]
Type=forking
User=nifi
Group=nifi
ExecStart=/opt/nifi/current/bin/nifi.sh start
ExecStop=/opt/nifi/current/bin/nifi.sh stop
ExecReload=/opt/nifi/current/bin/nifi.sh restart
Restart=on-failure
RestartSec=10

# Настройки JVM
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="NIFI_HOME=/opt/nifi/current"

# Лимиты ресурсов
LimitNOFILE=50000
LimitNPROC=10000

[Install]
WantedBy=multi-user.target
bash
# Создаём пользователя nifi
sudo useradd -r -s /bin/bash -d /opt/nifi -m nifi

# Назначаем права
sudo chown -R nifi:nifi /opt/nifi

# Перезагружаем systemd и запускаем сервис
sudo systemctl daemon-reload
sudo systemctl enable nifi.service
sudo systemctl start nifi.service

# Проверяем статус
sudo systemctl status nifi.service

# Просмотр логов
sudo journalctl -u nifi.service -f

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

Для горизонтального масштабирования настроим кластер. Сравним режимы работы:

Режим Standalone Кластер
Отказоустойчивость Нет (Single Point of Failure) Высокая
Масштабируемость Вертикальная Горизонтальная
Сложность настройки Низкая Средняя/Высокая

Конфигурация кластера из 3 узлов

На каждом узле в файле nifi.properties настраиваем:

config
# Включаем кластерный режим
nifi.cluster.is.node=true

# Адрес текущего узла (меняем для каждого узла)
nifi.cluster.node.address=nifi-node-1.local
nifi.cluster.node.protocol.port=11443

# Адреса всех узлов кластера
nifi.cluster.nodes=nifi-node-1.local,nifi-node-2.local,nifi-node-3.local

# Настройки выбора лидера
nifi.cluster.leader.election.implementation=org.apache.nifi.cluster.leader.standalone.StandaloneLeaderElectionManager

# Порт для веб-интерфейса (разный на каждом узле)
nifi.web.http.host=0.0.0.0
nifi.web.http.port=8080  # 8081, 8082 на других узлах
Совет: Для production-кластера используйте ZooKeeper для координации и отдельный load balancer (HAProxy, Nginx) для распределения трафика между UI узлами.

Безопасность и аутентификация

Настройка SSL/TLS и аутентификации для production-среды:

bash
# Генерация самоподписанного сертификата для тестов
keytool -genkeypair \
  -alias nifi \
  -keyalg RSA \
  -keysize 2048 \
  -keystore keystore.jks \
  -validity 365 \
  -storepass changeit \
  -keypass changeit \
  -dname "CN=localhost, OU=NIFI, O=Apache, L=Unknown, ST=Unknown, C=US"

# Экспорт сертификата в truststore
keytool -exportcert \
  -alias nifi \
  -keystore keystore.jks \
  -storepass changeit \
  -rfc -file nifi.cert

keytool -importcert \
  -alias nifi \
  -file nifi.cert \
  -keystore truststore.jks \
  -storepass changeit \
  -noprompt
config
# Включаем HTTPS в nifi.properties
nifi.web.https.host=0.0.0.0
nifi.web.https.port=8443

# Настройки keystore и truststore
nifi.security.keystore=/opt/nifi/current/conf/keystore.jks
nifi.security.keystoreType=JKS
nifi.security.keystorePasswd=changeit
nifi.security.keyPasswd=changeit
nifi.security.truststore=/opt/nifi/current/conf/truststore.jks
nifi.security.truststoreType=JKS
nifi.security.truststorePasswd=changeit

# Включаем аутентификацию
nifi.security.user.login.identity.provider=single-user-provider
nifi.security.user.authorizer=managed-authorizer

Оптимизация производительности

После установки настрой параметры для максимальной производительности:

  • JVM настройки: Увеличь Xmx в зависимости от доступной памяти
  • Репозитории: Размести flowfile и provenance репозитории на быстрых SSD
  • Потоки: Настрой nifi.bored.yield.duration и nifi.queue.swap.threshold
  • Мониторинг: Включи JMX и настрой Prometheus exporter
bash
# Пример оптимизированных JVM параметров в nifi-env.sh
export JAVA_ARGS="-Xms4g -Xmx8g"
export JAVA_ARGS="$JAVA_ARGS -XX:+UseG1GC"
export JAVA_ARGS="$JAVA_ARGS -XX:MaxGCPauseMillis=200"
export JAVA_ARGS="$JAVA_ARGS -Djava.awt.headless=true"
export JAVA_ARGS="$JAVA_ARGS -Djava.net.preferIPv4Stack=true"

Часто задаваемые вопросы (FAQ)

Как проверить, что NiFi работает правильно?

Выполни команду curl -I http://localhost:8080/nifi. Должен вернуться HTTP 200. Также проверь логи на наличие ошибок: tail -f logs/nifi-app.log.

NiFi не запускается, пишет "Unable to start web server"

Скорее всего порт 8080 занят. Измени порт в nifi.properties или останови conflicting service. Проверь: sudo netstat -tlnp | grep :8080.

Как мигрировать потоки данных между инстансами?

Используй функцию "Template" в UI или экспортируй flow.xml.gz из каталога conf. Для кластера используй Registry (NiFi Registry) для version control потоков.

Какие порты нужно открыть в firewall?

Для standalone: 8080 (HTTP) или 8443 (HTTPS). Для кластера: 8080/8443 + 11443 (межузловое общение) + порты для ZooKeeper (2181, 2888, 3888) если используется.

Как обновить NiFi на новую версию?

1. Останови текущий инстанс. 2. Сделай backup conf и flow директорий. 3. Установи новую версию в отдельную директорию. 4. Скопируй конфиги и данные. 5. Запусти и протестируй.

Заключение

Теперь у тебя есть полное руководство по установке Apache NiFi в различных конфигурациях. Начни с standalone-версии для тестирования, затем переходи к Docker для development-среды, и наконец — к кластерной конфигурации для production. Помни, что безопасность и мониторинг — не опции, а обязательные элементы production-развёртывания.

Следующие шаги: После успешной установки изучи процессоры NiFi, настрой подключение к источникам данных (Kafka, databases, APIs) и начни строить свои первые data pipelines.
Поделиться:
Сохранить гайд? В закладки браузера