Skip to main content

ADR 026: Select Message Bus

ADR 026 – Select Message Bus

Date: 2026-01-16

Status: Reviewed

Decision Makers: Architecture Board

Context

CIVITAS/CORE is designed as a modular, cloud-native Smart City platform composed of multiple loosely coupled services. As the number of services and integrations grows, the platform requires scalable and versatile message bus for the integration.

the message bus should support:

  • Sclaling possibilities for high message volumes (configuration and payload data will be distributed)
  • Fine grained topic management
  • Fine grained auhtorization management (at least read/write permissions per topic)
  • Broad support in different programming languages and components inkl. SDKs
  • Big open source community, as the message bus should have a very stable background, because of the importance for CIVITAS/CORE

In addition, the protocol must be flexible to use for different sizes of payload.

With different evaluations, the architecture team decided, that the Kafka protocol is preferred over other protocol standards. The felxibility, acceptance in the community and the broad spread of Kafka support in several languages, frameworks and OSS Components was most important for this descision.

Checked Architecture Principles

  • [full] Model-centric data flow
  • [full] Distributed architecture with unified user experience
  • [full] Modular design
  • [full] Integration capability through defined interfaces
  • [full] Open source as the default
  • [full] Cloud-native architecture
  • [full] Prefer standard solutions over custom development
  • [full] Self-contained deployment
  • [full] Technological consistency to ensure maintainability
  • [full] Multi-tenancy
  • [full] Security by design

Decision

CIVITAS/CORE uses Apache Kafka as central message bis.

Apache Kafka is selected due to its:

  • Flexibility
  • Scalability
  • OSS Community background
  • Wide Support in different technology stacks

Consequences

  • CIVITAS/CORE components should provide Kafka support out of the box
    • If no support is provided, the integration should be easy to implement

Alternatives

  • MQTT based brokers: Due to the reduced protocol features, mqtt is not the preferred candidate at least for configuration messages.