Первый commit
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
# nifi-docker
|
||||
|
||||
Учебный стенд для знакомства с Apache NiFi и Kafka: NiFi + NiFi Registry + Postgres + Kafka + Kafka UI.
|
||||
|
||||
## Быстрый старт
|
||||
```sh
|
||||
docker compose up -d
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
Остановить стенд:
|
||||
```sh
|
||||
docker compose stop
|
||||
```
|
||||
|
||||
Запустить обратно (после `stop` состояние сохраняется):
|
||||
```sh
|
||||
docker compose start
|
||||
```
|
||||
|
||||
Удалить контейнеры и сеть:
|
||||
```sh
|
||||
docker compose down
|
||||
```
|
||||
Затем поднять обратно (с сохранённым состоянием в томах):
|
||||
```sh
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Удалить ещё и тома (volumes) — полный сброс (деструктивно):
|
||||
```sh
|
||||
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.
|
||||
|
||||
Инициализация демо-схем/таблиц:
|
||||
```sh
|
||||
docker compose exec -T postgres psql -U postgres -d app -f /nifi-templates/SampleKafka2Postgres.sql
|
||||
```
|
||||
Запускайте это после первого старта или после `docker compose down -v` (скрипт не идемпотентный: при повторном запуске будут ошибки про существующие схемы/таблицы).
|
||||
|
||||
### Через консоль (если нужно)
|
||||
Просмотр данных:
|
||||
```sh
|
||||
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) В верхнем меню найдите `Templates` → `Upload 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`.
|
||||
|
||||
## Полезные команды
|
||||
```sh
|
||||
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`.
|
||||
Reference in New Issue
Block a user