Files
clickstream-ch-kafka-supers…/docs/DEMO_SCRIPT_10_15MIN.md
T
ddadmin 3bed37f532 docs(docs): add 10-15 minute demo script
- Why:
  - align interview demo with recruiter requirement for 10-15 minutes
- What:
  - add timed walkthrough with code, architecture and verification points
  - include fallback steps for UI issues and final speaking script
- Check:
  - verify paths/commands against repository files and DAG ids
2026-02-10 23:57:38 +03:00

183 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сценарий демо на 10-15 минут (код + архитектура)
Цель: дать студенту готовый сценарий, который показывает не только запуск стенда, но и инженерные решения в коде.
Формат: запись экрана + голос.
Ориентир по времени: 12 минут (допуск 10-15).
---
## 1) Подготовка перед записью (за 10-20 минут)
```bash
make up
docker compose ps
docker compose exec -T airflow-webserver airflow dags trigger ddl_init
docker compose exec -T airflow-webserver airflow dags trigger kafka_load --conf '{"limit": 50, "reset_topics": true}'
docker compose exec -T airflow-webserver airflow dags trigger etl_pipeline --conf '{"full_refresh": true}'
```
Проверить, что открываются:
- Kafka UI: `http://localhost:8082`
- Grafana: `http://localhost:3000/d/clickhouse-overview/clickhouse-overview`
- Airflow: `http://localhost:8080/dags/ddl_init/grid?tab=details`
- Superset (если используете): `http://localhost:8088/login/?next=/`
- ClickHouse Play: `http://localhost:9123/play`
Подготовить вкладки заранее:
- `Makefile`
- `docker-compose.yml`
- `docs/ARCHITECTURE.md`
- `airflow/dags/ddl_init_dag.py`
- `airflow/dags/kafka_load_dag.py`
- `airflow/dags/etl_pipeline_dag.py`
- `sql/ddl/stg/10_stg.sql`
- `sql/ods/20_stg_to_ods.sql`
- `sql/dds/30_ods_to_dds.sql`
- `sql/dm/40_dds_to_dm.sql`
Опционально подготовить DBeaver (если хотите показывать не через Play):
- Host: `localhost`
- Port: `9123` (HTTP) или `8002` (native)
- User: `default`
- Password: `123456`
---
## 2) Поминутный план выступления
### 0:00-1:30 Инфраструктура и цель проекта
Что показывать:
- Терминал с `docker compose ps`
- `Makefile`
- `docker-compose.yml`
Что говорить:
- «Это учебный mini DWH для кликстрима: Kafka, ClickHouse, Airflow, Superset, Prometheus, Grafana.»
- «Инфраструктура поднимается одной командой `make up`; внутри это `docker compose up -d`
- «В `Makefile` также есть команды для остановки, очистки, перезагрузки мониторинга и recovery.»
- «Сервисная цель проекта: быстро и повторяемо показать end-to-end поток данных до витрин.»
Что подчеркнуть в коде:
- В `Makefile` показать цели `up/down/clean/reload-monitoring/recover-monitoring`.
- В `docker-compose.yml` бегло показать ключевые сервисы и порты.
### 1:30-3:30 Архитектура и логика выбора
Что показывать:
- `docs/ARCHITECTURE.md` (диаграммы потока, слои STG/ODS/DDS/DM).
Что говорить:
- «Управление сделано через 3 DAG: `ddl_init`, `kafka_load`, `etl_pipeline`
- «STG нужен для сырых событий как есть, чтобы сохранять воспроизводимость.»
- «ODS типизирует и валидирует данные, включая фиксацию ошибок парсинга.»
- «DDS собирает бизнес-сущности `event` и `click` для аналитики.»
- «DM отдает витрины и агрегаты для BI и интервью-демо.»
Объяснение решений:
- «Разделение на слои уменьшает связность и ускоряет диагностику проблем.»
- «Грязные данные не останавливают пайплайн: ошибки уходят в `ods.*_errors` и DQ-слой.»
### 3:30-6:30 Показ кода DAG-ов
Что показывать:
- `airflow/dags/ddl_init_dag.py`
- `airflow/dags/kafka_load_dag.py`
- `airflow/dags/etl_pipeline_dag.py`
Что говорить:
- «В `ddl_init` код разворачивает DDL в ClickHouse и подготавливает структуру слоев.»
- «В `kafka_load` есть управляемые параметры `limit` и `reset_topics` для быстрого smoke-прогона.»
- «В `etl_pipeline` выполняются шаги STG->ODS->DDS->DM с конфигурацией `full_refresh`; итоговый DM-блок здесь — загрузка `dm.dq_summary`
- «Логика запуска ручная: это удобно для демонстрации на собеседовании и для отладки.»
Что обязательно назвать:
- «Почему `limit=50` в демо: скорость и повторяемость важнее полноты.»
- «Почему DAG-и разделены: проще локализовать сбой и перезапустить только нужный этап.»
### 6:30-8:30 Показ SQL и модели данных
Что показывать:
- `sql/ddl/stg/10_stg.sql`
- `sql/ods/20_stg_to_ods.sql`
- `sql/dds/30_ods_to_dds.sql`
- `sql/dm/40_dds_to_dm.sql`
Что говорить:
- «В STG используется связка Kafka Engine + Materialized View + MergeTree таблицы.»
- «ODS делает типизацию, нормализацию и отправку проблемных строк в таблицы ошибок.»
- «DDS собирает сущности по ключам (`event_id`, `click_id`), чтобы упростить аналитику.»
- «Витрины DM строятся поверх DDS и готовы для BI.»
Короткий акцент на DQ:
- «Вместо падения на невалидном JSON сохраняем ошибку и продолжаем обработку потока.»
### 8:30-10:30 Прогон в Airflow + проверка результата
Что показывать:
- Airflow UI: последний `Success` у `ddl_init`, `kafka_load`, `etl_pipeline`
- ClickHouse Play или DBeaver
Что выполнять:
```sql
SELECT count() AS rows FROM stg.browser_raw;
SELECT count() AS rows FROM ods.browser_event;
SELECT count() AS rows FROM dds.event;
SELECT * FROM dm.v_daily_traffic ORDER BY event_date DESC LIMIT 10;
SELECT * FROM dm.dq_summary ORDER BY layer, table_name, check_name LIMIT 20;
```
Что говорить:
- «На экране видно прохождение данных по слоям и непустые витрины.»
- «DQ summary подтверждает контроль качества и обработку проблемных записей.»
### 10:30-12:00 Мониторинг и финал
Что показывать:
- Grafana: ClickHouse/Kafka/Airflow dashboards
- Prometheus targets (опционально)
- Superset dashboard (если подготовлен)
Что говорить:
- «Мониторинг показывает здоровье стенда и ключевые технические метрики.»
- «На BI-слое уже можно отвечать на базовые бизнес-вопросы по трафику и UTM.»
- «Итог: решение покрывает инфраструктуру, ingestion, трансформации, DQ, витрины и observability.»
---
## 3) План Б, если что-то сломалось на записи
Если не открывается UI:
```bash
docker compose ps
docker compose logs -f --tail=100 airflow-webserver
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "SELECT count() FROM dds.event"
curl -s http://localhost:9090/api/v1/targets | grep -o '"health":"[^"]*"'
```
Если Grafana пустая:
```bash
make reload-monitoring
```
Если мониторинг завис:
```bash
make recover-monitoring
```
Короткая реплика:
- «Даже при проблемах UI я показываю проверку через CLI и SQL, чтобы подтвердить работоспособность пайплайна.»
---
## 4) Готовый текст финала (20-30 секунд)
«Я реализовал end-to-end mini DWH для кликстрима: от инфраструктуры и ingestion до витрин и мониторинга.
Архитектура послойная STG-ODS-DDS-DM, orchestration через Airflow DAG-и, а невалидные данные фиксируются без падения пайплайна.
Если нужно, могу детально разобрать любой уровень: DAG-код, SQL-трансформации, DQ-проверки или наблюдаемость системы.»