212 lines
9.9 KiB
Markdown
212 lines
9.9 KiB
Markdown
# DE Starter Kit — Greenplum + Kafka + Airflow
|
||
|
||
Добро пожаловать в учебный стенд для изучения основ Data Engineering! Этот проект поможет вам освоить ключевые инструменты современных data pipeline: **Airflow** для оркестрации, **Kafka** для потоковой передачи данных и **Greenplum** как аналитическую базу данных.
|
||
|
||
## 🎯 Что вы узнаете
|
||
|
||
- Как настроить локальный стек данных с помощью Docker
|
||
- Как Airflow управляет workflow и координирует задачи
|
||
- Как данные перемещаются из Kafka в аналитическую базу
|
||
- Как проверять качество данных в автоматизированных pipeline
|
||
- Основы проектирования ETL/ELT процессов
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт (для новичков)
|
||
|
||
### Шаг 1: Подготовка окружения
|
||
|
||
**Требования:**
|
||
- Docker Desktop (Windows/Mac) или Docker Engine 24+ (Linux)
|
||
- Git для клонирования репозитория
|
||
|
||
> 💡 **Совет:** Если у вас Windows, рекомендуем использовать WSL (Windows Subsystem for Linux) для лучшей совместимости.
|
||
|
||
### Шаг 2: Настройка проекта
|
||
|
||
```bash
|
||
# Скопируйте файл настроек
|
||
cp .env.example .env
|
||
|
||
# Запустите стек (это может занять 2-3 минуты при первом запуске)
|
||
docker compose up -d
|
||
|
||
# Инициализируйте Airflow
|
||
docker compose run --rm airflow-init
|
||
```
|
||
|
||
### Шаг 3: Первый запуск pipeline
|
||
|
||
1. Откройте Airflow UI: **http://localhost:8080** (логин/пароль: admin/admin)
|
||
2. Найдите DAG с названием **kafka_to_greenplum**
|
||
3. Нажмите на переключатель слева от названия DAG, чтобы включить его
|
||
4. Нажмите кнопку **Trigger** (значок воспроизведения ▶️)
|
||
|
||
🎉 **Поздравляем!** Вы только что запустили свой первый data pipeline:
|
||
- Система сгенерировала 1000 тестовых заказов
|
||
- Данные отправились в Kafka (систему потоковой передачи сообщений)
|
||
- Airflow прочитал данные из Kafka и загрузил их в Greenplum
|
||
|
||
### Шаг 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'"
|
||
|
||
# Внутри psql выполните:
|
||
\dt # Показать таблицы
|
||
SELECT count(*) FROM public.orders; # Посчитать записи
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ Подробная настройка (для уверенных пользователей)
|
||
|
||
### Установка Make (опционально)
|
||
|
||
Для удобства работы с проектом рекомендуем установить `make`:
|
||
|
||
- **Linux (Debian/Ubuntu):** `sudo apt install -y make`
|
||
- **macOS:** `brew install make`
|
||
- **Windows:**
|
||
- WSL: `sudo apt install -y make`
|
||
- Chocolatey: `choco install make`
|
||
- Scoop: `scoop install make`
|
||
|
||
С `make` команды становятся короче:
|
||
```bash
|
||
make up && make airflow-init # Запуск стека
|
||
make logs # Просмотр логов
|
||
make gp-psql # Подключение к Greenplum
|
||
```
|
||
|
||
### Настройка подключения к Greenplum в Airflow
|
||
|
||
По умолчанию DAG использует переменные окружения, но вы можете создать Airflow Connection:
|
||
|
||
1. Airflow UI → **Admin → Connections → Add a new record**
|
||
2. Заполните поля:
|
||
- **Conn Id:** `greenplum_conn`
|
||
- **Conn Type:** `Postgres`
|
||
- **Host:** `greenplum`
|
||
- **Schema:** `gpadmin`
|
||
- **Login:** `gpadmin`
|
||
- **Password:** `gpadmin`
|
||
- **Port:** `5432`
|
||
|
||
---
|
||
|
||
## 📋 Что входит в стенд
|
||
|
||
### Основные компоненты
|
||
- **Greenplum** — аналитическая база данных для хранения и анализа данных
|
||
- **Kafka** — система потоковой передачи данных (без Zookeeper)
|
||
- **Airflow** — оркестратор workflow и задач
|
||
- **Postgres** — база метаданных для Airflow
|
||
|
||
### Готовые DAG (workflow)
|
||
- **kafka_to_greenplum** — базовый pipeline: генерация → Kafka → Greenplum
|
||
- **greenplum_data_quality** — проверки качества данных (наличие таблицы, схема, дубликаты)
|
||
|
||
### Полезные команды
|
||
```bash
|
||
# Основные команды
|
||
make up # Запустить весь стенд
|
||
make down # Остановить и удалить данные
|
||
make airflow-init # Инициализировать Airflow
|
||
make ddl-gp # Применить DDL к Greenplum
|
||
make gp-psql # Подключиться к Greenplum через psql
|
||
|
||
# Проверка данных
|
||
make logs # Следить за логами Airflow
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Настройка через переменные окружения
|
||
|
||
Все настройки находятся в файле `.env`. Основные параметры:
|
||
|
||
### Greenplum
|
||
- `GP_USER` — пользователь (по умолчанию: gpadmin)
|
||
- `GP_PASSWORD` — пароль (по умолчанию: gpadmin)
|
||
- `GP_DB` — база данных (по умолчанию: gpadmin)
|
||
- `GP_PORT` — порт (по умолчанию: 5432)
|
||
|
||
### Kafka
|
||
- `KAFKA_TOPIC` — имя топика (по умолчанию: orders)
|
||
- `KAFKA_BATCH_SIZE` — размер пакета при загрузке (по умолчанию: 500)
|
||
|
||
### Airflow
|
||
- `GP_CONN_ID` — ID подключения (по умолчанию: greenplum_conn)
|
||
|
||
---
|
||
|
||
## 🔍 Продвинутые темы
|
||
|
||
### Архитектура pipeline
|
||
|
||
**Поток данных в DAG `kafka_to_greenplum`:**
|
||
1. `create_table` — создает таблицу `public.orders` в Greenplum
|
||
2. `produce_messages` — генерирует и отправляет сообщения в Kafka
|
||
3. `consume_and_load` — читает из Kafka и загружает в Greenplum батчами
|
||
|
||
> 💡 **Безопасность повторного запуска:** Pipeline защищен от дубликатов, поэтому его можно запускать многократно.
|
||
|
||
### Проверка качества данных
|
||
|
||
Запустите DAG `greenplum_data_quality` для автоматической проверки:
|
||
- Наличие таблицы в базе
|
||
- Соответствие схемы ожидаемой структуре
|
||
- Объем загруженных данных
|
||
- Отсутствие дубликатов записей
|
||
|
||
### Ограничения учебного стенда
|
||
|
||
- **Greenplum** запущен в single-node режиме (для обучения)
|
||
- В продакшене Greenplum обычно разворачивают кластером на нескольких серверах
|
||
- Используется Greenplum 6 (широко доступная версия), хотя Greenplum 7 предлагает больше возможностей
|
||
|
||
---
|
||
|
||
## 🆘 Типичные проблемы и решения
|
||
|
||
| Проблема | Решение |
|
||
|----------|---------|
|
||
| Airflow UI не открывается | Дождитесь сообщения `Listening at: http://0.0.0.0:8080` в логах (`make logs`) |
|
||
| Ошибка подключения к Greenplum | Убедитесь, что контейнер `greenplum` стал статусом `healthy` (проверьте `docker compose ps`) |
|
||
| Нет топика `orders` в Kafka | Создайте топик через Kafka UI или дождитесь авто-создания при первом запуске DAG |
|
||
| Команда `make` не найдена | Используйте полные команды `docker compose` или установите make |
|
||
|
||
---
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
├── docker-compose.yml # Описание всех сервисов
|
||
├── .env.example # Шаблон настроек
|
||
├── Makefile # Удобные команды для работы
|
||
├── airflow/
|
||
│ └── dags/ # Файлы workflow (DAG)
|
||
│ ├── kafka_to_greenplum.py
|
||
│ └── data_quality_greenplum.py
|
||
└── sql/
|
||
└── ddl_gp.sql # Создание таблицы в Greenplum
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 Советы для дальнейшего обучения
|
||
|
||
1. **Поэкспериментируйте с DAG** — измените параметры генерации данных или размер батча
|
||
2. **Добавьте свои проверки** — расширьте DAG `data_quality_greenplum.py`
|
||
3. **Попробуйте другие источники** — замените генератор данных на чтение из файла или API
|
||
4. **Изучите Airflow deeper** — добавьте зависимости между задачами, настройте расписания
|
||
|
||
Удачи в изучении Data Engineering! 🚀
|