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 сообщения
This commit is contained in:
2026-06-09 17:27:01 +03:00
committed by Dmitry Dementiev
parent 7c6cfd7d18
commit e8d1c9efa9
9 changed files with 1332 additions and 1 deletions
+31
View File
@@ -284,6 +284,37 @@ services:
postgres-metadata:
condition: service_healthy
# Генератор событий (автономный стриминг в Kafka)
generator:
build:
context: ./generator
dockerfile: Dockerfile
environment:
KAFKA_BOOTSTRAP_SERVERS: 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: /data
GEN_ENABLED: "true"
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: "9000"
# PYTHONUNBUFFERED для сразу видеть логи
PYTHONUNBUFFERED: "1"
volumes:
- ./data:/data:ro
networks:
- cs_dwh
depends_on:
- kafka
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
interval: 30s
timeout: 10s
retries: 3
# Kafka Exporter для мониторинга через Prometheus
kafka-exporter:
image: danielqsj/kafka-exporter:v1.9.0