Skip to content

ADR_00007: Eventy publikovány přes Kafka

Status: Proposed / Accepted
Date: 2025-12-29


Context

V e‑shopu používáme DDD a všechny změny stavu agregátů jsou publikovány jako domain eventy.
Pro asynchronní integraci mezi doménami a microservices potřebujeme spolehlivý a škálovatelný messaging systém.

Po analýze možností (RabbitMQ, SQS, NATS, Kafka) chceme zvolit Kafka, protože:

  • podporuje high-throughput a low-latency messaging,
  • garantuje ordering per topic/partition,
  • umožňuje event replay pro read modely, migrace a nové domény,
  • dobře se integruje s outbox pattern.

Decision

  • Všechny domain eventy jsou publikovány do Kafka topiců.
  • Každá core nebo supporting doména má definované topicy pro své eventy.
  • Ostatní domény čtou eventy přes Kafka consumer, typicky z inbox/outbox patternu.
  • Garantujeme at least once delivery a idempotentní zpracování v consumeru.
  • Eventy mohou být zpracovávány asynchronně a slouží k naplnění read modelů nebo triggeru dalších procesů.

Povolený postup

  1. Agregát změní stav a vytvoří domain event.
  2. Event se uloží do outboxu.
  3. Outbox worker publikuje event do příslušného Kafka topicu.
  4. Ostatní domény čtou eventy z topicu a aktualizují své read modely nebo reagují jinak.

Zakázané praktiky

  • Přímé zápisy do cizích databází

Considered Alternatives

  • RabbitMQ

    • Výhody:
      • Snadné nasazení a správa, bohatá funkcionalita pro routing zpráv.
      • Nižší latence při menším počtu zpráv.
    • Nevýhody:
      • Horší horizontální škálovatelnost při velkém počtu brokerů/nodů.
      • Event replay není nativně podporováno (vyžaduje vlastní řešení nebo persistent queue).
      • Pro provoz v Kubernetes složitější koordinace clusteru a failoveru.
  • Azure Service Bus

    • Výhody:
      • Plně managed služba, vysoká dostupnost a SLA.
      • Podpora topic/subscription modelu a dead-letter queues.
    • Nevýhody:
      • Vyšší cena při velkém objemu zpráv.
      • Latence a propustnost mohou být omezené ve srovnání s Kafkou pro high-throughput scénáře.
      • Vendor lock-in a závislost na cloudové infrastruktuře.