eike.schumann/kafka-cqrs
35.7
Weak · 22 September 2026
1.3k
lines of production code
Java
with JavaScript
6
measurements over time
What this system is
This system is a document management platform built on a CQRS (Command Query Responsibility Segregation) architecture, separating write and read operations. It exposes a REST API to create, update, and delete documents, which are then persisted to a Cassandra database via a background service. The system also provides real-time notifications via Server-Sent Events and a React-based web interface for user interaction.
Features
Add default configuration for the producer service
A new application.properties file has been added to the producer-service resources, establishing default settings for the server port (8083) and Kafka connectivity (bootstrap servers and topic).
producer-service/src/main/resources · high confidence
Docker containerization for persister-service
The persister-service is now containerized with a new Dockerfile and entrypoint script. The container uses OpenJDK 13 Alpine, installs bash and netcat, and runs the application via a shell script that waits for the Cassandra service to become available on port 9042 before starting.
persister-service · high confidence
Initial Terraform configuration for Kafka and Zookeeper infrastructure
The Terraform module now fully provisions an AWS environment for running Apache Kafka and Zookeeper. It defines an EC2 instance (Ubuntu 16.04 LTS) with a security group allowing SSH and Kafka port 9092 access, along with an Elastic IP. The configuration includes scripts to download and install Java, Zookeeper, and Kafka, and sets up systemd services for both. Outputs are provided for SSH and Telnet connectivity.
terraform · high confidence
Initial Web UI for document management and notifications
The web-ui area introduces a new React-based interface for creating, reading, updating, and deleting documents, alongside a real-time notifications panel. The UI renders four main action forms (Create, Read, Update, Delete) and a notifications section, each wired to make HTTP requests via Axios and display the request and response payloads. The NotificationsContainer establishes an EventSource connection to receive server-sent events, while the build configuration (Webpack, Babel, SCSS) supports the new frontend code.
web-ui · high confidence
Introduce document management API with Kafka integration
The producer-service now exposes a REST API for creating, updating, and deleting documents. Each operation sends a corresponding message (Create, Update, or Delete) to a Kafka topic via a new Kafka configuration and SenderService. The create endpoint returns the generated document ID in the response, while update and delete endpoints return standard HTTP status codes. This adds the producer-side implementation for the CQRS pattern, handling request assembly and message serialization.
producer-service/src/main/java · high confidence
Introduce persister-service to persist Kafka events to Cassandra
Added a new persister-service that listens to Kafka topics and persists incoming messages to a Cassandra database. The service includes configuration for Kafka consumers, a message model, and a repository layer that handles upsert and delete operations against Cassandra, enabling the system to store and manage document data based on Kafka events.
persister-service/src/main/java · high confidence
Introduce reader service with document retrieval API
Adds a new reader service that exposes a REST endpoint to retrieve documents by ID from a Cassandra database. The service is packaged as a Docker image using OpenJDK 13 and includes a startup script that waits for the Cassandra service to become available before launching the application. The implementation includes a Spring Boot application, a Cassandra configuration, a document model, a REST controller, and a UUID converter, along with corresponding integration and unit tests.
reader-service · high confidence
Introduce the Notifier Service
Added the Notifier Service, a new component that listens for messages from a Kafka topic and exposes them via a server on port 8081 using Server-Sent Events. The service is configured with Kafka connection details and a consumer group, and integrates with the existing Kafka infrastructure.
notifier-service/src/main · high confidence
New test utilities for HTTP clients, Kafka, and Vert.x
The test-utils module now includes a suite of new helper classes to support integration testing. HTTP testing is supported via new clients (NotifierClient, ProducerClient, ReaderClient) and response wrappers (JsonResponse, SseResponse, SseEvent) that use the Java 11 HttpClient. Kafka testing is enabled through a @KafkaTopic annotation and a Spring ContextCustomizer that automatically injects configured KafkaTemplate instances into test fields. Additional utilities include a Vert.x test helper (TestVertx) for deploying verticles in tests, a TCP utility to find free ports, and shared utilities for loading Java properties and serializing JSON.
test-utils/src/main/java · high confidence
Spring auto-configuration for Kafka test utilities
A new Spring Boot auto-configuration file (META-INF/spring.factories) has been added to the test-utils module. This registers a custom Spring Test ContextCustomizerFactory (pl.jojczykp.kafka\_cqrs.test\_utils.kafka.KafkaTopicContextCustomizerFactory), enabling automatic setup of Kafka topics for tests without manual configuration.
test-utils/src/main/resources · high confidence
Behavioural changes
Added Kafka and Cassandra configuration for persister-service
A new application.properties file was added to the persister-service resources, defining connection details for Kafka (bootstrap servers, group, and topic) and Cassandra (node, port, keyspace, and table). This enables the service to connect to these external systems.
persister-service/src/main/resources · high confidence
Test coverage
Added end-to-end tests for document lifecycle; Added test configuration for Kafka CQRS logging; Added test resources for Cassandra and logging configuration; Added tests for DocumentRepository; Added tests for Kafka and Web notifier verticles; Added unit and integration tests for the producer service; Added unit tests for Kafka listener and persistence services.
Dependencies
Initial project structure and dependency configuration
The repository has been restructured into a multi-module Gradle project named 'kafka-cqrs', replacing the previous 'aws-kafka' root. This change introduces several new subprojects: 'producer-service', 'notifier-service', 'persister-service', 'reader-service', 'test-utils', and 'e2e-tests'. The build is configured to use Java 11, Spring Boot 2.1.1, Spring Kafka 2.2.2, and various other libraries like Lombok, Guava, and Spock. A new 'web-ui' module is also added with React and Webpack dependencies. The Gradle wrapper is updated to version 5.1, and Docker build tasks are integrated for the service modules.
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 35 → 36 (+1.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 54 → 57 (+2.3)
- Architecture 69 → 84 (+14.7)
- Maturity 47 → 47 (+0.0)
- Readiness 17 → 17 (+0.0)
- Security 81 → 80 (-1.0)
- Accessibility 45 → 46 (+1.7)
Resolved (17)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Medium IaC: CKV_AWS_126 (terraform/kafka.tf)
- Medium IaC: CKV_AWS_23 (terraform/kafka.tf)
- Medium IaC: CKV_DOCKER_3 (notifier-service/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (persister-service/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (producer-service/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (reader-service/Dockerfile)
- Medium IaC: CKV_DOCKER_6 (notifier-service/Dockerfile)
- Medium IaC: CKV_DOCKER_6 (persister-service/Dockerfile)
- Medium IaC: CKV_DOCKER_6 (producer-service/Dockerfile)
- Medium IaC: CKV_DOCKER_6 (reader-service/Dockerfile)
- Medium: security finding (details withheld)
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- single-maintainer — knowledge-concentration (bus factor) risk
New (17)
- Change coupling clique: CreateDocumentContainer.jsx, DeleteDocumentContainer.jsx, ReadDocumentContainer.jsx, UpdateDocumentContainer.jsx (web-ui/src/js/components/container/CreateDocumentContainer.jsx)
- Critical IaC: AWS-0104 (terraform/kafka.tf)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (notifier-service/src/main/java/pl/jojczykp/kafka_cqrs/notifier/config/KafkaConfig.java)
- High: security finding (details withheld)
- Low IaC: AWS-0124 (terraform/kafka.tf)
- Low IaC: AWS-0124 (terraform/kafka.tf)
- Low IaC: AWS-0124 (terraform/kafka.tf)
- Medium IaC: WD-DOCKER-0003 (notifier-service/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (persister-service/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (producer-service/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (reader-service/Dockerfile)
- No ADRs found
- Scanner failed to run — not a clean result
- Scanner failed to run — not a clean result
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
eike.schumann/kafka-cqrs was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit dd335b89bb19765db1a9cbb3565cfee4b2882945 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-821afab8930d.