diff --git a/airflow-greenplum/.env.example b/airflow-greenplum/.env.example index 7d5f63a..a220e1a 100644 --- a/airflow-greenplum/.env.example +++ b/airflow-greenplum/.env.example @@ -22,3 +22,4 @@ KAFKA_TOPIC=orders KAFKA_BATCH_SIZE=500 KAFKA_POLL_TIMEOUT=10 KAFKA_MAX_EMPTY_POLLS=3 +KAFKA_UI_CLUSTER_NAME=KafkaCluster diff --git a/airflow-greenplum/README.md b/airflow-greenplum/README.md index e9a4280..d13cbc8 100644 --- a/airflow-greenplum/README.md +++ b/airflow-greenplum/README.md @@ -16,6 +16,7 @@ Airflow по‑прежнему использует **Postgres** только - **Airflow (2.9)** — оркестрация пайплайна, metadata в Postgres. - **DAG** `kafka_to_greenplum.py` — генерирует данные → пишет в Kafka → читает и грузит в Greenplum. - **DAG** `greenplum_data_quality.py` — выполняет проверки качества данных (наличие таблицы, схема, заполненность, дубли). +- **Kafka UI** — автоматически подключается к стендовому брокеру (bootstrap берётся из `KAFKA_BOOTSTRAP` или значения по умолчанию). - **DDL** `sql/ddl_gp.sql` — создаёт колонночную таблицу `orders` без PRIMARY KEY (AO-таблицы GP6 не поддерживают его), распределённую по `order_id`; контроль дублей реализован в DAG. > Примечание по версиям и надёжности: используется образ `woblerr/greenplum:6.27.1` с поддержкой переменных окружения и fallback значениями. Для продакшен‑подобных тестов зафиксируй digest (SHA256) конкретного тега на Docker Hub. @@ -73,7 +74,7 @@ airflow connections add 'greenplum_conn' \ ### Интерфейсы и порты - Airflow UI: http://localhost:8080 (admin/admin по умолчанию) -- Kafka UI: http://localhost:8082 (просмотр топиков/сообщений) +- Kafka UI: http://localhost:8082 (просмотр топиков/сообщений; подключение к кластеру создаётся автоматически) - Greenplum: `localhost:${GP_PORT:-5432}` (внешний порт проброшен из контейнера) - Postgres (Airflow metadata): `localhost:5433` - Kafka (для клиентов на хосте): `localhost:9092` @@ -122,6 +123,13 @@ SELECT count(*) FROM public.orders; - `GP_CONN_ID` — ID Airflow Connection (по умолчанию: `greenplum_conn`) - `GP_USE_AIRFLOW_CONN` — использовать ли Airflow Connection (`true`/`false`). Если `false`, DAG подключается к БД напрямую по ENV. +Настройки Kafka берутся из тех же переменных окружения: + +- `KAFKA_BOOTSTRAP` — bootstrap-адрес брокера для Airflow и Kafka UI (по умолчанию `kafka:29092`). +- `KAFKA_TOPIC` — имя демо-топика (по умолчанию `orders`). +- `KAFKA_BATCH_SIZE`, `KAFKA_POLL_TIMEOUT`, `KAFKA_MAX_EMPTY_POLLS` — параметры чтения/загрузки (см. раздел выше). +- `KAFKA_UI_CLUSTER_NAME` — отображаемое имя кластера в Kafka UI (по умолчанию `KafkaCluster`). + Образ `woblerr/greenplum:6.27.1` использует переменные: - `GREENPLUM_USER` (маппится на `GP_USER`) - `GREENPLUM_PASSWORD` (маппится на `GP_PASSWORD`) diff --git a/airflow-greenplum/docker-compose.yml b/airflow-greenplum/docker-compose.yml index ba8a6e0..774f591 100644 --- a/airflow-greenplum/docker-compose.yml +++ b/airflow-greenplum/docker-compose.yml @@ -64,12 +64,13 @@ services: kafka-ui: image: provectuslabs/kafka-ui:v0.7.2 + env_file: .env ports: - 8082:8080 environment: - - DYNAMIC_CONFIG_ENABLED=true - - KAFKA_CLUSTERS_0_NAME=KafkaCluster - - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:29092 + DYNAMIC_CONFIG_ENABLED: "true" + KAFKA_CLUSTERS_0_NAME: ${KAFKA_UI_CLUSTER_NAME:-KafkaCluster} + KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: ${KAFKA_BOOTSTRAP:-kafka:29092} volumes: - kafka-ui-data:/app/data depends_on: