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 задач корректно определены)
This commit is contained in:
@@ -61,8 +61,7 @@ check_clickhouse >> ddl_00_databases >> ddl_10_stg >> ddl_20_ods >> ddl_30_dds >
|
||||
|
||||
## Дизайн DAG `kafka_load` (отдельный независимый контур)
|
||||
### Params (через Trigger DAG with config)
|
||||
- `limit`: int, default `50`.
|
||||
- `full_load`: bool, default `false`.
|
||||
- `limit`: int, default `0` (0 = все строки).
|
||||
- `reset_topics`: bool, default `true`.
|
||||
- `load_browser`: bool, default `true`.
|
||||
- `load_location`: bool, default `true`.
|
||||
|
||||
+22
-1
@@ -15,8 +15,27 @@
|
||||
make up
|
||||
```
|
||||
|
||||
2) (Опционально) Залить данные в Kafka:
|
||||
2) Залить данные в Kafka (два варианта):
|
||||
|
||||
**Вариант А: Через Airflow DAG `kafka_load` (рекомендуется, фаза 2)**
|
||||
```bash
|
||||
# Через 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` (устаревший)**
|
||||
```bash
|
||||
make data
|
||||
```
|
||||
@@ -38,6 +57,8 @@ make ddl
|
||||
|
||||
План реализации механики заливки (дизайн/решения): `plans/kafka_ingest_plan.md`.
|
||||
|
||||
План Airflow DAG'ов: `plans/airflow_dags_plan.md`.
|
||||
|
||||
## Загрузка данных в Kafka (`make data`)
|
||||
|
||||
### Топики
|
||||
|
||||
Reference in New Issue
Block a user