2026-01-08 12:32:22 +03:00
2026-01-08 12:32:22 +03:00
2026-01-08 12:32:22 +03:00
2026-01-08 12:32:22 +03:00
2026-01-08 12:32:22 +03:00
2026-01-08 12:32:22 +03:00

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 downup (чтобы не копить дисковое пространство). Между stopstart Kafka сохраняется. Пример подключения тома (volume) для Kafka есть в docker-compose.yml.

Адреса и доступы

Важно про адреса (внутри 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 topic Sample2Kafka
  • SampleKafka2Postgres.json — читает из Kafka topic Sample2Kafka и пишет в Postgres (в stg.samplekafka2postgres, затем вызывает ods.load_samplekafka2postgres())

Памятка: как импортировать Process Group / Flow в NiFi

Файлы нужно загружать через браузер с вашей машины (каталог nifi-templates/).

Вариант 1: шаблон .xml (Template)

  1. Откройте NiFi: http://localhost:18443/nifi/
  2. В верхнем меню найдите TemplatesUpload Template → выберите файл nifi-templates/Sample2Kafka.xml.
  3. На канвасе: нажмите правой кнопкой мыши → Instantiate Template (или иконка Template на панели) → выберите шаблон → разместите process group на канвасе.

Вариант 2: flow definition .json Название пункта может отличаться в зависимости от UI/версии, но смысл один — “загрузить process group/flow definition из файла”:

  1. В верхнем меню найдите действие вроде Upload / Import / Process Group → выберите загрузку из файла.
  2. Выберите nifi-templates/SampleKafka2Postgres.json (или Sample2Kafka.json) и разместите process group на канвасе.

После импорта, как правило, нужно:

  • перейти внутрь process group;
  • включить Controller Services (Configure → Controller Services → Enable, или “enable all controller services”);
  • затем запустить процессоры.

Рекомендуемый минимальный сценарий:

  1. topic Sample2Kafka вручную создавать обычно не требуется: он создаётся автоматически при первой попытке записи (если в Kafka включено автосоздание топиков; по умолчанию оно включено). Если по какой-то причине topic не появился — создайте его в Kafka UI.
  2. Импортируйте flow в NiFi (в зависимости от UI: import/upload template для .xml или import flow definition для .json). Если вы импортировали раньше, то после docker compose down flow сохранится.
  3. Внутри 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.
S
Description
No description provided
Readme
1.1 MiB
Languages
PLpgSQL 100%