- Зачем: - свежий стенд должен доходить до generator_control без скрытых ручных шагов и зависаний. - Что: - quick start явно готовит DDL и откладывает Superset init до готового DM. - generator_control проверяет паузу etl_pipeline до мутирующих шагов. - make up пересобирает Airflow и поднимает базовый набор сервисов. - Проверка: - make generator-test; docker compose config --quiet; make clean; make up; make ddl.
154 lines
7.7 KiB
Markdown
154 lines
7.7 KiB
Markdown
# Учебный стенд DWH кликстрима
|
||
|
||
[](./docker-compose.yml)
|
||
[](./docs/ARCHITECTURE.md)
|
||
|
||
Живой стек для работы с кликстримом: Kafka, ClickHouse, Airflow, Superset и мониторинг
|
||
(Prometheus с Grafana) поднимаются в Docker одной командой. На этом стенде можно учиться
|
||
по курсу или просто поднять его у себя и поэкспериментировать с потоковой загрузкой и
|
||
витринами.
|
||
|
||
Поток данных коротко:
|
||
- **стартовая история**: `generator backfill → Kafka → ClickHouse (STG) →
|
||
batch STG → ODS → DDS → DM → Superset`.
|
||
- **живое продолжение**: `generator live → Kafka → ClickHouse (STG) → batch ETL
|
||
→ Superset`.
|
||
|
||
Файлы `data/*.jsonl` больше не основной источник аналитики. Пока они остаются
|
||
архивной кладовкой значений для генератора: браузеры, страны, устройства и UTM.
|
||
|
||
## Куда дальше
|
||
|
||
- **Хочешь учиться** — открой [курс «Кликстрим на ClickHouse»](./docs/course/README.md).
|
||
Это продвинутый курс «со звёздочкой»: основные приёмы инженерии данных проходишь прямо
|
||
на этом стенде.
|
||
- **Хочешь поднять и попробовать** — следуй быстрому старту ниже.
|
||
- **Хочешь разобраться в устройстве** — смотри [архитектуру слоёв](./docs/ARCHITECTURE.md),
|
||
[запуск и эксплуатацию](./docs/OPERATIONS.md) и [карту репозитория](./docs/REPO_MAP.md).
|
||
|
||
## Быстрый старт
|
||
|
||
Перед первой командой нужны `Docker` с `docker compose`, `make`, `bash`, `curl`,
|
||
`git` и `uv`. `uv` нужен для локальных Python-проверок и команд разработки.
|
||
|
||
Для ручной работы поднимите стенд и создайте стартовую историю через Airflow:
|
||
|
||
```bash
|
||
make up
|
||
make ddl
|
||
docker compose ps
|
||
```
|
||
|
||
Откройте Airflow: `http://localhost:8080` (`admin/admin`). Запустите
|
||
`generator_control` с операцией `backfill`: DAG создаст стартовую историю,
|
||
запустит ETL и выполнит `check`. `make up` не запускает live-генератор; live
|
||
включается отдельно командой `make generator-continue`.
|
||
|
||
После обновления репозитория снова выполните `make up`: команда пересобирает
|
||
Airflow-образ и подтягивает новые зависимости и DAG-и. Superset-дэшборд
|
||
собирается позже, когда DM уже готов: через `make generated-history-analytics`
|
||
или `make superset-init`.
|
||
|
||
Для полностью автоматического чистого прогона из консоли остаётся команда:
|
||
|
||
```bash
|
||
make generated-history-analytics
|
||
```
|
||
|
||
По умолчанию это быстрый профиль `ci`: 6 часов модельного времени. Историю на
|
||
2 суток с суточной волной можно прогнать одной командой. В live-продолжении
|
||
`daily-wave` идёт с ×60: модельные сутки проходят примерно за 24 настенные
|
||
минуты.
|
||
|
||
```bash
|
||
PROFILE=daily-wave make generated-history-analytics
|
||
```
|
||
|
||
Разовую длительность можно задать без ручного расчёта правой границы:
|
||
|
||
```bash
|
||
GEN_HISTORY_DURATION=2d make generated-history-analytics
|
||
```
|
||
|
||
Повторить только техническую проверку после уже выполненного прогона:
|
||
|
||
```bash
|
||
make generated-history-check
|
||
```
|
||
|
||
Сохранить стартовую историю в файл и восстановить её без новой генерации можно
|
||
по [runbook стартовой истории](./docs/runbooks/startup-history.md).
|
||
|
||
Проверить, что данные дошли до витрин:
|
||
|
||
```bash
|
||
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 \
|
||
--query "SELECT count() FROM dm.v_events_enriched"
|
||
```
|
||
|
||
Подробный сценарий запуска, параметры DAG-ов и разбор частых проблем — в
|
||
[OPERATIONS](./docs/OPERATIONS.md).
|
||
|
||
## Сервисы и доступы
|
||
|
||
| Сервис | Адрес | Назначение | Логин/пароль |
|
||
|--------|-------|------------|--------------|
|
||
| Airflow | `http://localhost:8080` | оркестрация ETL | admin/admin |
|
||
| ClickHouse | `http://localhost:9123/play` | SQL-запросы | default/123456 |
|
||
| Kafka UI | `http://localhost:8082` | просмотр топиков | — |
|
||
| Superset | `http://localhost:8088` | дашборды | admin/admin |
|
||
| Prometheus | `http://localhost:9090` | метрики | — |
|
||
| Grafana | `http://localhost:3000` | графики метрик | admin/admin |
|
||
|
||
Готовый дашборд в Superset:
|
||
`http://localhost:8088/superset/dashboard/ecommerce-analytics/` — он создаётся
|
||
во время `make generated-history-analytics`. Состав и настройка дашборда описаны в
|
||
[SUPERSET_DASHBOARD](./docs/SUPERSET_DASHBOARD.md).
|
||
|
||
## Как устроен поток данных
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
subgraph GEN["Generator"]
|
||
BF["backfill"]
|
||
LIVE["live"]
|
||
end
|
||
|
||
subgraph Kafka["Kafka"]
|
||
Topics[4 топика]
|
||
end
|
||
|
||
subgraph CH["ClickHouse"]
|
||
STG["STG: сырые данные"]
|
||
ODS["ODS: типизация + DQ"]
|
||
DDS["DDS: сущности"]
|
||
DM["DM: витрины VIEW"]
|
||
end
|
||
|
||
BF -->|стартовая история| Kafka
|
||
LIVE -->|продолжение| Kafka
|
||
Kafka -->|Kafka MV| STG
|
||
STG -->|batch| ODS -->|batch| DDS -->|VIEW| DM
|
||
|
||
DDL["DDL"] -.-> CH
|
||
```
|
||
|
||
«Грязные» записи не роняют пайплайн: ошибки разбора складываются в `ods.*_errors` и в
|
||
поле `parse_errors`, а обработка продолжается.
|
||
|
||
Подробное описание слоёв STG/ODS/DDS/DM, диаграммы и обоснование решений —
|
||
в [ARCHITECTURE](./docs/ARCHITECTURE.md).
|
||
|
||
## Документация
|
||
|
||
- [Архитектура и слои](./docs/ARCHITECTURE.md) — устройство STG/ODS/DDS/DM, диаграммы,
|
||
обоснование решений.
|
||
- [Запуск и эксплуатация](./docs/OPERATIONS.md) — сценарий запуска, параметры DAG-ов,
|
||
мониторинг, частые проблемы.
|
||
- [Runbook стартовой истории](./docs/runbooks/startup-history.md) — экспорт,
|
||
импорт и live-продолжение из готового артефакта.
|
||
- [Карта репозитория](./docs/REPO_MAP.md) — где какие файлы и что менять.
|
||
- [Курс «Кликстрим на ClickHouse»](./docs/course/README.md) — учебная программа на этом
|
||
стенде.
|
||
- [DE-task.md](./docs/DE-task.md) — задание, из которого вырос стенд.
|