ADR-0002: Kafka как event bus
Status: accepted Date: 2026-04-17 Deciders: команда проекта
Контекст
Требуется брокер сообщений для:
- распространения событий между компонентами (ingestion → normalization → matching → projections);
- event sourcing distribution (compacted topic для snapshot-стримов);
- интеграции с ClickHouse (ingestion аналитики).
Альтернативы: Kafka, NATS, RabbitMQ, Redpanda.
Решение
Kafka как единая шина событий.
- Compacted topics для event-sourced агрегатов.
- Non-compacted topics для приложений с retention-политикой.
- Топики версионируются в имени (
.v1,.v2). - Партиционирование по ключу агрегата для гарантии порядка.
Последствия
Плюсы
- Богатая семантика для event sourcing (compacted topics, retention, ordering внутри партиции).
- Зрелая интеграция с ClickHouse (Kafka engine).
- Обширный tooling (Kafka UI, Schema Registry, ksqlDB).
- Хорошо документированные failure modes и операционные паттерны.
Минусы
- Оперировать Kafka сложнее, чем NATS (требуется Zookeeper / KRaft, больше настроек).
- Выше ресурсопотребление в минимальной конфигурации.
Нейтральные последствия
- Redpanda как API-совместимая замена — возможный будущий переход без изменения кода.
Рассмотренные альтернативы
NATS JetStream
Проще в операциях, легче. Но слабее в event sourcing-сценариях (compacted topics аналог — KV bucket, менее зрелый).
RabbitMQ
Не event-sourcing-дружественный (очереди, а не лог). Снятый с рассмотрения.
Redpanda
API-совместимая замена Kafka на старте возможна, но отложили, чтобы иметь более широкий ecosystem tooling при разработке.
Ссылки
- Principles: P4, P5
- Topics inventory:
../schemas/events/README.md