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 при разработке.

Ссылки