Files
clickstream-ch-kafka-supers…/generator/README.md
T
ddadminandDmitry Dementiev e8d1c9efa9 feat(infra): добавлен автономный генератор событий для Kafka
- Зачем:
  - нужен постоянный поток данных для демонстрации работы стека
  - текущий batch-загрузчик не позволяет показать streaming-сценарии
- Что:
  - добавлен сервис generator с режимом steady (Poisson-интенсивность)
  - генератор публикует в 4 топика: browser/location/device/geo_events
  - сохраняются связи event_id и click_id между событиями
  - сборка через uv для скорости и компактности образа
  - добавлены команды generator-* в Makefile
  - комплексные тесты: валидация, статистика, формат сообщений
- Проверка:
  - `docker run --rm -v $(pwd)/..:/workspace -w /workspace/generator generator:test python test_comprehensive.py` — 8/8 тестов
  - `make generator-up` — 3 тика без ошибок, отправлено 2904 сообщения
2026-06-09 17:27:01 +03:00

3.6 KiB

Генератор событий (MVP)

Автономный сервис для стриминга событий в Kafka.

Архитектура

generator-service -> Kafka topics -> (потребители отдельно)

Генератор работает автономно и не зависит от потребителей (Airflow, ClickHouse).

Режим работы: steady

  • Каждую минуту публикуем переменный объём событий (Poisson + jitter)
  • Распределяем события по 4 топикам:
    • browser_events
    • location_events
    • device_events
    • geo_events
  • Сохраняем связи event_id <-> location, click_id <-> device/geo

Конфигурация (env)

Переменная Описание По умолчанию
KAFKA_BOOTSTRAP_SERVERS Адрес Kafka kafka:29092
GEN_TICK_SECONDS Интервал между тиками 60
GEN_LAMBDA_BASE_PER_MIN Базовая интенсивность (событий/мин) 200
GEN_JITTER_PCT Процент вариативности 20
GEN_MIN_EVENTS_PER_TICK Минимум событий за тик 50
GEN_MAX_EVENTS_PER_TICK Максимум событий за тик 500
GEN_DATA_DIR Путь к JSONL файлам /data
GEN_SEED Сид для воспроизводимости
GEN_ENABLED Включить генерацию true

Управление через Makefile

# Запустить только генератор
make generator-up

# Остановить генератор
make generator-down

# Смотреть логи
make generator-logs

# Перезапуск с пересборкой
make generator-restart

Логи и метрики

Логи

=== Tick 1 (batch_id=a1b2c3d4) ===
Generating ~156 base events
Batch a1b2c3d4 completed: sent=624, errors=0, gen_time=0.012s, pub_time=0.234s, total_time=0.247s
  browser_events: 156 sent
  location_events: 156 sent
  device_events: 156 sent
  geo_events: 156 sent
Sleeping for 59.8s until next tick

Метрики (в коде)

  • generator_events_total — всего отправлено событий
  • generator_publish_errors_total — ошибки публикации
  • generator_tick_duration_seconds — длительность тика

Тестирование

Локальные тесты

# Базовые тесты
docker run --rm -v $(pwd)/..:/workspace -w /workspace/generator generator:test python test_local.py

# Комплексные тесты (проверка граничных случаев, статистики, формата)
docker run --rm -v $(pwd)/..:/workspace -w /workspace/generator generator:test python test_comprehensive.py

Интеграционный тест

# Запустить стек с генератором
make generator-up

# Проверить логи
make generator-logs

# Проверить сообщения в Kafka
docker compose exec kafka /opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server kafka:29092 --topic browser_events --from-beginning

История batch

Хранится в памяти (последние 1000 записей). Поля:

  • batch_id — идентификатор батча
  • started_at / finished_at — время начала/окончания
  • sent_total — всего отправлено
  • sent_browser/location/device/geo — по топикам
  • status — success/partial/error