refactor(generator): история batch в Kafka вместо ClickHouse

- Зачем:
  - ревью rev5: ClickHouse-интеграция была проблемной (порт 9000 native vs HTTP,
    неработающий fallback, отсутствие DDL для базы meta)
  - архитектурно чище: генератор остаётся pure Kafka producer,
    история доступна для аналитики через стандартный ingestion
- Что:
  - удален ClickHouseBatchHistory, clickhouse-connect зависимость
  - добавлен KafkaBatchHistory с записью в топик generator_batch_history
  - добавлен BatchRecord.to_dict() для JSON-сериализации
  - добавлен рабочий fallback: Kafka → InMemory при недоступности
  - удален pytest-asyncio (не использовался)
  - добавлены тесты test_kafka_history.py (15 тестов) и test_service.py (6 тестов)
  - обновлена документация: топик вместо таблицы ClickHouse
- Проверка:
  - make generator-test: 44/44 тестов пройдено
  - docker-compose валиден, генератор не зависит от clickhouse
This commit is contained in:
2026-06-09 17:27:16 +03:00
committed by Dmitry Dementiev
parent 36ecbc62b1
commit 731d991f94
9 changed files with 483 additions and 145 deletions
+15 -19
View File
@@ -36,8 +36,6 @@ generator-service -> Kafka topics -> (потребители отдельно)
| `GEN_SEED` | Сид для воспроизводимости | — |
| `GEN_ENABLED` | Включить генерацию | `true` |
| `GEN_METRICS_PORT` | Порт для Prometheus | `9109` |
| `CLICKHOUSE_HOST` | Хост ClickHouse для истории | `clickhouse` |
| `CLICKHOUSE_PORT` | Порт ClickHouse | `9000` |
### Режим "раз в минуту" (для демо)
@@ -62,6 +60,9 @@ make generator-logs
# Перезапуск с пересборкой
make generator-restart
# Запуск тестов
make generator-test
```
## Метрики Prometheus
@@ -84,27 +85,25 @@ curl http://localhost:9090/api/v1/targets | grep generator
## История batch
История сохраняется в таблице `meta.generator_batches` (ClickHouse):
История пишется в Kafka-топик `generator_batch_history` (JSON). При недоступности Kafka используется in-memory fallback (последние 1000 записей).
```sql
SELECT
batch_id,
started_at,
sent_total,
status
FROM meta.generator_batches
ORDER BY started_at DESC
LIMIT 10
```
Поля:
Поля сообщения:
- `batch_id` — идентификатор батча
- `started_at` / `finished_at` — время начала/окончания
- `started_at` / `finished_at` — время начала/окончания (ISO format)
- `sent_total` — всего отправлено
- `sent_browser/location/device/geo` — по топикам
- `status` — success/partial/error
- `error_message` — описание ошибки (если есть)
### Чтение истории из Kafka
```bash
docker compose exec kafka /opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server kafka:29092 \
--topic generator_batch_history \
--from-beginning
```
## Тестирование
Тесты написаны на **pytest**.
@@ -115,9 +114,6 @@ LIMIT 10
# Через Makefile (рекомендуется)
make generator-test
# С покрытием
make generator-test-cov
# Вручную через Docker
docker build -t generator:test .
docker run --rm -v $(PWD):/workspace -w /workspace/generator generator:test pytest tests/ -v