Убрана kafka, переделан dag на работу с csv

This commit is contained in:
2025-10-14 22:43:20 +03:00
parent 50865db5e6
commit d17c1da542
8 changed files with 182 additions and 220 deletions
+26 -23
View File
@@ -1,12 +1,13 @@
# DE Starter Kit — Greenplum + Kafka + Airflow
# DE Starter Kit — Airflow + Greenplum + CSV
Добро пожаловать в учебный стенд для изучения основ Data Engineering! Этот проект поможет вам освоить ключевые инструменты современных data pipeline: **Airflow** для оркестрации, **Kafka** для потоковой передачи данных и **Greenplum** как аналитическую базу данных.
Добро пожаловать в учебный стенд для изучения основ Data Engineering! Этот проект поможет вам освоить ключевые инструменты современных data pipeline: **Airflow** для оркестрации, **pandas/CSV** для подготовки данных и **Greenplum** как аналитическую базу данных.
## 🎯 Что вы узнаете
- Как настроить локальный стек данных с помощью Docker
- Как Airflow управляет workflow и координирует задачи
- Как данные перемещаются из Kafka в аналитическую базу
- Как генерировать датасеты через pandas и сохранять их в CSV
- Как загружать данные в Greenplum пакетами и избегать дублей
- Как проверять качество данных в автоматизированных pipeline
- Основы проектирования ETL/ELT процессов
@@ -38,22 +39,18 @@ docker compose run --rm airflow-init
### Шаг 3: Первый запуск pipeline
1. Откройте Airflow UI: **http://localhost:8080** (логин/пароль: admin/admin)
2. Найдите DAG с названием **kafka_to_greenplum**
2. Найдите DAG с названием **csv_to_greenplum**
3. Нажмите на переключатель слева от названия DAG, чтобы включить его
4. Нажмите кнопку **Trigger** (значок воспроизведения ▶️)
🎉 **Поздравляем!** Вы только что запустили свой первый data pipeline:
- Система сгенерировала 1000 тестовых заказов
- Данные отправились в Kafka (систему потоковой передачи сообщений)
- Airflow прочитал данные из Kafka и загрузил их в Greenplum
- Система сгенерировала 1000 тестовых заказов при помощи pandas
- Датасет сохранился в CSV-файл в каталоге `./data`
- Airflow загрузил данные из CSV в Greenplum без дублей по `order_id`
### Шаг 4: Проверка результатов
**Через веб-интерфейс:**
- Kafka UI: **http://localhost:8082** — посмотрите топик `orders` и сообщения
- Airflow UI: **http://localhost:8080** — отслеживайте выполнение задач
**Через командную строку:**
**Проверка вручную:**
```bash
# Подключитесь к Greenplum и проверьте данные
docker compose exec greenplum bash -c "su - gpadmin -c 'psql -p 5432 -d gpadmin'"
@@ -61,8 +58,13 @@ docker compose exec greenplum bash -c "su - gpadmin -c 'psql -p 5432 -d gpadmin'
# Внутри psql выполните:
\dt # Показать таблицы
SELECT count(*) FROM public.orders; # Посчитать записи
# Посмотреть несколько строк
SELECT * FROM public.orders LIMIT 5;
```
CSV-файлы после выполнения DAG остаются в директории `./data`. Их можно открыть любым редактором или изучить через pandas.
---
## 🛠️ Подробная настройка (для уверенных пользователей)
@@ -105,12 +107,12 @@ make gp-psql # Подключение к Greenplum
### Основные компоненты
- **Greenplum** — аналитическая база данных для хранения и анализа данных
- **Kafka** — система потоковой передачи данных (без Zookeeper)
- **Airflow** — оркестратор workflow и задач
- **Postgres** — база метаданных для Airflow
- **pandas** — библиотека для генерации и анализа данных в формате CSV
### Готовые DAG (workflow)
- **kafka_to_greenplum** — базовый pipeline: генерация → Kafka → Greenplum
- **csv_to_greenplum** — базовый pipeline: pandas → CSV → Greenplum
- **greenplum_data_quality** — проверки качества данных (наличие таблицы, схема, дубликаты)
### Полезные команды
@@ -138,9 +140,9 @@ make logs # Следить за логами Airflow
- `GP_DB` — база данных (по умолчанию: gpadmin)
- `GP_PORT` — порт (по умолчанию: 5432)
### Kafka
- `KAFKA_TOPIC` — имя топика (по умолчанию: orders)
- `KAFKA_BATCH_SIZE` — размер пакета при загрузке (по умолчанию: 500)
### CSV pipeline
- `CSV_DIR` — путь к каталогу с CSV внутри контейнеров Airflow (по умолчанию: `/opt/airflow/data`)
- `CSV_ROWS` — количество строк, генерируемых DAG (по умолчанию: 1000)
### Airflow
- `GP_CONN_ID` — ID подключения (по умолчанию: greenplum_conn)
@@ -151,10 +153,11 @@ make logs # Следить за логами Airflow
### Архитектура pipeline
**Поток данных в DAG `kafka_to_greenplum`:**
1. `create_table` — создает таблицу `public.orders` в Greenplum
2. `produce_messages` — генерирует и отправляет сообщения в Kafka
3. `consume_and_load` — читает из Kafka и загружает в Greenplum батчами
**Поток данных в DAG `csv_to_greenplum`:**
1. `create_orders_table` — создаёт таблицу `public.orders` в Greenplum
2. `generate_csv` — генерирует датасет при помощи pandas и сохраняет CSV в `CSV_DIR`
3. `preview_csv` — выводит предпросмотр и статистику по данным
4. `load_csv_to_greenplum` — загружает CSV во временную таблицу и переносит новые строки в `public.orders`
> 💡 **Безопасность повторного запуска:** Pipeline защищен от дубликатов, поэтому его можно запускать многократно.
@@ -180,7 +183,7 @@ make logs # Следить за логами Airflow
|----------|---------|
| Airflow UI не открывается | Дождитесь сообщения `Listening at: http://0.0.0.0:8080` в логах (`make logs`) |
| Ошибка подключения к Greenplum | Убедитесь, что контейнер `greenplum` стал статусом `healthy` (проверьте `docker compose ps`) |
| Нет топика `orders` в Kafka | Создайте топик через Kafka UI или дождитесь авто-создания при первом запуске DAG |
| Нет файла в `./data` после запуска DAG | Проверьте логи задачи `generate_csv`, убедитесь, что `CSV_DIR` смонтирован в docker-compose |
| Команда `make` не найдена | Используйте полные команды `docker compose` или установите make |
---
@@ -193,7 +196,7 @@ make logs # Следить за логами Airflow
├── Makefile # Удобные команды для работы
├── airflow/
│ └── dags/ # Файлы workflow (DAG)
│ ├── kafka_to_greenplum.py
│ ├── csv_to_greenplum.py
│ └── data_quality_greenplum.py
└── sql/
└── ddl_gp.sql # Создание таблицы в Greenplum