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:
2026-02-08 18:13:22 +03:00
parent 12f35679f0
commit 10f5bc3510
10 changed files with 778 additions and 16 deletions
+13 -5
View File
@@ -33,10 +33,18 @@ docker compose ps
docker compose exec -T airflow-webserver airflow dags trigger ddl_init
```
Загрузка небольшого среза данных в Kafka:
Загрузка данных в Kafka (фаза 2 — через Airflow):
```bash
make data # по умолчанию первые 50 строк
# или: FULL=1 make data # полный датасет (1000 строк)
# Вариант 1: Через Airflow DAG (рекомендуется) — полная загрузка по умолчанию
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}'
# Вариант 2: Через shell-скрипт (устаревший)
make data # полная загрузка
```
Запуск batch-трансформации (STG -> ODS -> DDS -> DM) в Airflow (если DAG выключен, сначала unpause):
@@ -95,8 +103,8 @@ flowchart TB
end
subgraph Airflow["Airflow"]
DAG[DAG: ddl_init / etl_pipeline]
end
DAG[DAG: ddl_init / kafka_load / etl_pipeline]
end
Sources -->|make data| Kafka -->|MV| STG -->|Batch SQL| ODS -->|Batch SQL| DDS -->|VIEW| DM
DAG -.->|оркестрация| STG & ODS & DDS & DM