# rameshmf/springboot-kafka-course architecture

> Architecture diagram of the GitHub repository rameshmf/springboot-kafka-course, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rameshmf/springboot-kafka-course
- Repository: https://github.com/rameshmf/springboot-kafka-course

## Overview

This repository combines two Spring Boot Kafka examples: HTTP endpoints publish plain-text or JSON messages, while a separate real-world application streams Wikimedia recent changes through Kafka into a database. The tutorial also includes Kafka consumers for text and JSON. The main calls and persistence operations are visible in excerpts; some wiring, especially the tutorial text consumer and topic configuration, is not shown, so those links are omitted or marked unverified.

Main entry points: [`springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java`](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java) (JSON Endpoint), [`springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java`](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java) (JSON Producer), [`springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java`](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java) (Database Consumer), [`springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java`](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java) (Data Repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_tutorial["Kafka Tutorial"]
  node_message_controller["Text Endpoint"]
  node_json_controller["JSON Endpoint"]
  node_text_producer["Text Producer<br/>[KafkaProducer.java]"]
  node_json_producer["JSON Producer"]
  node_user_payload["User Payload<br/>[User.java]"]
  node_text_consumer["Text Consumer<br/>[KafkaConsumer.java]"]
  node_json_consumer["JSON Consumer"]
end

subgraph group_wikimedia["Wikimedia Ingestion"]
  node_producer_app["Stream Launcher"]
  node_stream_producer["Change Producer"]
  node_stream_handler["Change Handler"]
end

subgraph group_persistence["Database Persistence"]
  node_database_consumer["Database Consumer"]
  node_data_repository["Data Repository"]
  node_wikimedia_entity["Change Record<br/>[WikimediaData.java]"]
  node_relational_db[("Relational Database")]
end

subgraph group_messaging["Kafka Messaging"]
  node_topic_config["Topic Setup"]
  node_stream_topic_config["Stream Topic Setup"]
  node_kafka["Kafka Broker"]
end

node_api_user(("API Caller"))
node_wikimedia_source(("Wikimedia Stream"))

node_api_user -->|"requests"| node_message_controller
node_message_controller -->|"sends message"| node_text_producer
node_api_user -->|"posts JSON"| node_json_controller
node_json_controller -->|"accepts payload"| node_user_payload
node_json_controller -->|"sends payload"| node_json_producer
node_json_producer -->|"publishes payload"| node_user_payload
node_text_producer -->|"publishes text"| node_kafka
node_json_producer -->|"publishes JSON"| node_kafka
node_kafka -->|"dispatches JSON"| node_json_consumer
node_json_consumer -->|"consumes payload"| node_user_payload
node_kafka -.-> node_text_consumer
node_producer_app -->|"starts stream"| node_stream_producer
node_stream_producer -->|"creates handler"| node_stream_handler
node_wikimedia_source -->|"streams changes"| node_stream_handler
node_stream_handler -->|"publishes events"| node_kafka
node_kafka -->|"delivers events"| node_database_consumer
node_database_consumer -->|"creates record"| node_wikimedia_entity
node_database_consumer -->|"saves record"| node_data_repository
node_data_repository -->|"stores entity"| node_wikimedia_entity
node_data_repository -.->|"persists records"| node_relational_db

click node_message_controller "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/MessageController.java"
click node_json_controller "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java"
click node_text_producer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaProducer.java"
click node_json_producer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java"
click node_user_payload "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/payload/User.java"
click node_text_consumer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaConsumer.java"
click node_json_consumer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaConsumer.java"
click node_topic_config "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/config/KafkaTopicConfig.java"
click node_producer_app "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/SpringBootProducerApplication.java"
click node_stream_producer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesProducer.java"
click node_stream_handler "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesHandler.java"
click node_stream_topic_config "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/KafkaTopicConfig.java"
click node_database_consumer "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java"
click node_data_repository "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java"
click node_wikimedia_entity "https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/entity/WikimediaData.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_message_controller,node_json_controller,node_text_producer,node_json_producer,node_user_payload,node_text_consumer,node_json_consumer toneBlue
class node_producer_app,node_stream_producer,node_stream_handler toneAmber
class node_database_consumer,node_data_repository,node_wikimedia_entity,node_relational_db,node_api_user toneMint
class node_topic_config,node_stream_topic_config,node_kafka toneRose
class node_wikimedia_source toneIndigo
```

## Components

### Kafka Tutorial

- [Text Endpoint](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/MessageController.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/MessageController.java`
- [JSON Endpoint](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java`
- [Text Producer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaProducer.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaProducer.java`
- [JSON Producer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java`
- [User Payload](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/payload/User.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/payload/User.java`
- [Text Consumer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaConsumer.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaConsumer.java`
- [JSON Consumer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaConsumer.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaConsumer.java`

### Wikimedia Ingestion

- [Stream Launcher](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/SpringBootProducerApplication.java): `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/SpringBootProducerApplication.java`
- [Change Producer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesProducer.java): `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesProducer.java`
- [Change Handler](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesHandler.java): `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesHandler.java`

### Database Persistence

- [Database Consumer](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java): `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java`
- [Data Repository](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java): `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java`
- [Change Record](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/entity/WikimediaData.java): `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/entity/WikimediaData.java`
- **Relational Database**

### Kafka Messaging

- [Topic Setup](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/config/KafkaTopicConfig.java): `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/config/KafkaTopicConfig.java`
- [Stream Topic Setup](https://github.com/rameshmf/springboot-kafka-course/blob/main/springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/KafkaTopicConfig.java): `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/KafkaTopicConfig.java`
- **Kafka Broker**

### Other components

- **API Caller**
- **Wikimedia Stream**

## Connections

- API Caller → Text Endpoint: requests (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/MessageController.java`)
- Text Endpoint → Text Producer: sends message (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/MessageController.java`)
- API Caller → JSON Endpoint: posts JSON (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java`)
- JSON Endpoint → User Payload: accepts payload (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java`)
- JSON Endpoint → JSON Producer: sends payload (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/controller/JsonMessageController.java`)
- JSON Producer → User Payload: publishes payload (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java`)
- Text Producer → Kafka Broker: publishes text (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/KafkaProducer.java`)
- JSON Producer → Kafka Broker: publishes JSON (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaProducer.java`)
- Kafka Broker → JSON Consumer: dispatches JSON (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaConsumer.java`)
- JSON Consumer → User Payload: consumes payload (evidence: `springboot-kafka-tutorial/src/main/java/net/javaguides/springboot/kafka/JsonKafkaConsumer.java`)
- Kafka Broker → Text Consumer
- Stream Launcher → Change Producer: starts stream (evidence: `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/SpringBootProducerApplication.java`)
- Change Producer → Change Handler: creates handler (evidence: `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesProducer.java`)
- Wikimedia Stream → Change Handler: streams changes
- Change Handler → Kafka Broker: publishes events (evidence: `springboot-kafka-real-world-project/kafka-producer-wikimedia/src/main/java/net/javaguides/springboot/WikimediaChangesHandler.java`)
- Kafka Broker → Database Consumer: delivers events (evidence: `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java`)
- Database Consumer → Change Record: creates record (evidence: `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java`)
- Database Consumer → Data Repository: saves record (evidence: `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/KafkaDatabaseConsumer.java`)
- Data Repository → Change Record: stores entity (evidence: `springboot-kafka-real-world-project/kafka-consumer-database/src/main/java/net/javaguides/springboot/repository/WikimediaDataRepository.java`)
- Data Repository → Relational Database: persists records
