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:
+15
-19
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user