nifi-docker
Учебный стенд для знакомства с Apache NiFi и Kafka: NiFi + NiFi Registry + Postgres + Kafka + Kafka UI.
Быстрый старт
docker compose up -d
docker compose ps
Остановить стенд:
docker compose stop
Запустить обратно (после stop состояние сохраняется):
docker compose start
Удалить контейнеры и сеть:
docker compose down
Затем поднять обратно (с сохранённым состоянием в томах):
docker compose up -d
Удалить ещё и тома (volumes) — полный сброс (деструктивно):
docker compose down -v
Что сохраняется между перезапусками
docker compose stop/start— сохраняется всё (контейнеры не удаляются).docker compose down— контейнеры удаляются, но тома (volumes) остаются: сохраняются NiFi (conf/state), NiFi Registry, Postgres.docker compose down -v— полный сброс: удаляются и контейнеры, и тома (volumes).
Примечание: в этой конфигурации Kafka-сообщения/топики не сохраняются между docker compose down → up (чтобы не копить дисковое пространство). Между stop → start Kafka сохраняется. Пример подключения тома (volume) для Kafka есть в docker-compose.yml.
Адреса и доступы
- NiFi: http://localhost:18443/nifi/ (логин
admin, парольPassword123456) - NiFi docs: https://nifi.apache.org/documentation/
- Registry: http://localhost:18080/nifi-registry
- Registry docs: https://nifi.apache.org/docs/nifi-registry-docs/
- Kafka UI: http://localhost:8082/
- Kafka UI docs: https://docs.kafka-ui.provectus.io/
Важно про адреса (внутри Docker и с хоста)
Если вы настраиваете подключение в NiFi, то localhost почти всегда будет неправильным (NiFi живёт в контейнере).
Используйте имена сервисов из docker-compose.yml:
- Postgres (из NiFi):
jdbc:postgresql://postgres:5432/app - Kafka (из NiFi):
kafka:29092 - Registry (из NiFi):
http://registry:18080
А с локальной машины:
- Postgres:
jdbc:postgresql://localhost:5437/app - Kafka:
localhost:9092
PostgreSQL
JDBC-драйвер для Postgres лежит в drivers/ и монтируется в контейнер NiFi как /opt/nifi/nifi-current/drivers/.
Параметры для DBCP в NiFi:
- Database Connection URL:
jdbc:postgresql://postgres:5432/app - Database Driver Class Name:
org.postgresql.Driver - Database Driver Location(s):
/opt/nifi/nifi-current/drivers/postgresql-42.7.4.jar - Database User:
postgres - Password:
postgres
Подключение через DBeaver (удобнее всего)
Postgres проброшен наружу на порт 5437, поэтому в DBeaver создайте подключение со следующими параметрами:
- Host:
localhost - Port:
5437 - Database:
app - Username:
postgres - Password:
postgres
Если DBeaver предложит скачать драйвер — соглашайтесь скачать/установить драйвер PostgreSQL.
Инициализация демо-схем/таблиц:
docker compose exec -T postgres psql -U postgres -d app -f /nifi-templates/SampleKafka2Postgres.sql
Запускайте это после первого старта или после docker compose down -v (скрипт не идемпотентный: при повторном запуске будут ошибки про существующие схемы/таблицы).
Через консоль (если нужно)
Просмотр данных:
docker compose exec -it postgres bash -c "export PGPASSWORD=postgres; psql -U postgres -d app"
select * from ods.samplekafka2postgres order by id desc limit 10;
Kafka
- С локальной машины (например, для консольных утилит):
localhost:9092 - Из NiFi (внутри Docker):
kafka:29092
Примеры flow (шаблоны)
В nifi-templates/ лежат примеры:
Sample2Kafka.xml/Sample2Kafka.json— публикует сообщения в Kafka topicSample2KafkaSampleKafka2Postgres.json— читает из Kafka topicSample2Kafkaи пишет в Postgres (вstg.samplekafka2postgres, затем вызываетods.load_samplekafka2postgres())
Памятка: как импортировать Process Group / Flow в NiFi
Файлы нужно загружать через браузер с вашей машины (каталог nifi-templates/).
Вариант 1: шаблон .xml (Template)
- Откройте NiFi: http://localhost:18443/nifi/
- В верхнем меню найдите
Templates→Upload Template→ выберите файлnifi-templates/Sample2Kafka.xml. - На канвасе: нажмите правой кнопкой мыши →
Instantiate Template(или иконка Template на панели) → выберите шаблон → разместите process group на канвасе.
Вариант 2: flow definition .json
Название пункта может отличаться в зависимости от UI/версии, но смысл один — “загрузить process group/flow definition из файла”:
- В верхнем меню найдите действие вроде
Upload/Import/Process Group→ выберите загрузку из файла. - Выберите
nifi-templates/SampleKafka2Postgres.json(илиSample2Kafka.json) и разместите process group на канвасе.
После импорта, как правило, нужно:
- перейти внутрь process group;
- включить Controller Services (Configure →
Controller Services→ Enable, или “enable all controller services”); - затем запустить процессоры.
Рекомендуемый минимальный сценарий:
- topic
Sample2Kafkaвручную создавать обычно не требуется: он создаётся автоматически при первой попытке записи (если в Kafka включено автосоздание топиков; по умолчанию оно включено). Если по какой-то причине topic не появился — создайте его в Kafka UI. - Импортируйте flow в NiFi (в зависимости от UI: import/upload template для
.xmlили import flow definition для.json). Если вы импортировали раньше, то послеdocker compose downflow сохранится. - Внутри flow включите Controller Services, затем запустите процессоры.
Kafka UI уже настроен в docker-compose.yml:
- Cluster name:
Kafka Cluster - Bootstrap Servers:
kafka:29092
Shared folder (общая папка)
Каталог shared-folder/ на хосте смонтирован в контейнер NiFi как /opt/nifi/nifi-current/ls-target (удобно для ListFile/GetFile).
Если после запуска контейнеров возникают проблемы с правами: sudo chown -R $USER shared-folder.
Полезные команды
docker compose logs -f nifi
docker compose logs -f kafka
docker compose exec postgres bash
Для доступа из NiFi к сервисам на локальной машине используйте host.docker.internal вместо localhost.
Если что-то не работает
- NiFi может запускаться 1–3 минуты; смотрите
docker compose logs -f nifi. - Если процессор в NiFi не подключается к Kafka/Postgres, проверьте, что используете адреса “из NiFi” (см. раздел про Docker).
- Если порты заняты, измените проброс портов в
docker-compose.yml.