Files
clickstream-ch-kafka-supers…/plans/runbook.md
T
ddadmin 10f5bc3510 feat(airflow): реализован DAG kafka_load для загрузки в Kafka (фаза 2)
- Добавлен kafka-python==2.0.6 в airflow/requirements.txt
- Создан dags/utils/kafka_helpers.py с функциями:
  - check_kafka_ready() — проверка доступности брокера
  - prepare_topics() — создание/сброс топиков через KafkaAdminClient
  - load_jsonl() — загрузка данных через KafkaProducer (limit=0 = все)
  - validate_load_params(), check_input_files() — валидация
- Создан dags/kafka_load_dag.py с TaskGroup:
  - precheck: check_kafka, check_input_files, validate_load_params
  - ingest: prepare_topics, параллельная загрузка 4 потоков, verify_publish_counts
- Параметры DAG: limit (0 = все), reset_topics, load_* (выбор потоков)
- Обновлена документация: AGENTS.md, README.md, plans/runbook.md,
  plans/airflow_dags_plan.md, docs/ARCHITECTURE.md

Тестирование:
- Подключение к Kafka:  (kafka:29092 доступен, брокер 2.6.0)
- Загрузка данных:  (1000 сообщений — полный файл browser_events)
- Python синтаксис:  (py_compile проходит)
- Структура DAG:  (все 9 задач корректно определены)
2026-02-08 18:13:22 +03:00

4.7 KiB
Raw Blame History

Runbook: запуск демо и загрузка данных

Этот документ фиксирует порядок действий и make‑таргеты. Он не описывает внутренности ClickHouse‑слоёв (это в plans/clickhouse_ddl.md).

Предпосылки

  • Docker + Docker Compose.
  • Доступ к Docker daemon (если docker compose ... пишет permission denied ... /var/run/docker.sock, добавьте пользователя в группу docker или запускайте команды с правами, принятыми в вашей среде).

Быстрый сценарий

  1. Поднять инфраструктуру:
make up
  1. Залить данные в Kafka (два варианта):

Вариант А: Через Airflow DAG kafka_load (рекомендуется, фаза 2)

# Через CLI — полная загрузка по умолчанию
docker compose exec -T airflow-webserver airflow dags trigger kafka_load \
  --conf '{"reset_topics": true}'

# Ограниченная загрузка — первые 100 строк
docker compose exec -T airflow-webserver airflow dags trigger kafka_load \
  --conf '{"limit": 100, "reset_topics": true}'

# Или через UI: Airflow → DAGs → kafka_load → Trigger DAG with config

Параметры kafka_load:

  • limit — количество строк (default: 0 — все строки)
  • reset_topics — пересоздать топики (default: true)
  • load_browser/load_location/load_device/load_geo — выбор потоков (default: true)

Вариант Б: Через shell-скрипт make data (устаревший)

make data

make data не зависит от ClickHouse/DDL — достаточно, чтобы Kafka была поднята.

  1. Применить DDL в ClickHouse:
make ddl

Make таргеты

  • make updocker compose up -d (поднимает весь стек из docker-compose.yml).
  • make ddl — применяет исполняемые SQL-файлы из sql/ddl/* в контейнер ClickHouse через clickhouse-client.
  • make data — пересоздаёт топики (по умолчанию) и публикует события из data/*.jsonl в Kafka (1 строка = 1 Kafka message value).
  • make transform — выполняет batch-процесс STG -> ODS -> DDS -> DM через scripts/run_batch.sh.

План реализации механики заливки (дизайн/решения): plans/kafka_ingest_plan.md.

План Airflow DAG'ов: plans/airflow_dags_plan.md.

Загрузка данных в Kafka (make data)

Топики

Скрипт использует фиксированный маппинг:

  • data/browser_events.jsonlbrowser_events
  • data/location_events.jsonllocation_events
  • data/device_events.jsonldevice_events
  • data/geo_events.jsonlgeo_events

Режимы загрузки

  • По умолчанию — “debug срез”: первые 50 строк каждого файла.
  • Полная загрузка — весь файл.

Параметры (env):

  • LIMIT — сколько строк брать из каждого .jsonl. По умолчанию загружаются все записи (весь файл). Для ограничения используйте LIMIT=50 или LIMIT=100.
  • RESET_TOPICS — если RESET_TOPICS=1 (по умолчанию), топики удаляются и создаются заново с теми же именами.
  • BOOTSTRAP_SERVER — bootstrap для Kafka изнутри kafka‑контейнера (по умолчанию kafka:29092).

Примеры:

# Загрузить все данные (по умолчанию)
make data

# Быстрый тест — 50 строк на поток
LIMIT=50 make data

# Ограниченная загрузка — 100 строк на поток
LIMIT=100 make data

# Дозалить данные без пересоздания топиков
RESET_TOPICS=0 make data

Применение DDL в ClickHouse (make ddl)

Скрипт исполняет SQL-файлы из sql/ddl/* по фиксированному порядку. Для ENGINE = Kafka важно, чтобы kafka_broker_list был доступен из контейнера ClickHouse.

В текущем compose:

  • для соединений “контейнер → Kafka” используйте kafka:29092;
  • localhost:9092 подходит только для клиентов на хосте.