# java-techie-jt/kafka-idempotency architecture

> Architecture diagram of the GitHub repository java-techie-jt/kafka-idempotency, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/java-techie-jt/kafka-idempotency
- Repository: https://github.com/java-techie-jt/kafka-idempotency

## Overview

This repository demonstrates a Kafka-based order-to-payment workflow with idempotent payment persistence. A client submits an order; the order service assigns a request ID and publishes the event; the payment service consumes it, records a payment, and acknowledges the message. A unique request-ID constraint supports duplicate detection. The README is only a title, so this map relies on the sampled source; database-backed order saving and a real payment-gateway call are comments, not implemented behavior.

Main entry points: [`payment-service/src/main/java/com/javatechie/listener/OrderConsumer.java`](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/listener/OrderConsumer.java) (Order consumer), [`order-service/src/main/java/com/javatechie/controller/OrderController.java`](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/controller/OrderController.java) (Order controller), [`order-service/src/main/java/com/javatechie/service/OrderService.java`](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/service/OrderService.java) (Order service), [`payment-service/src/main/java/com/javatechie/service/PaymentService.java`](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/service/PaymentService.java) (Payment service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orders["Order service"]
  node_controller["Order controller"]
  node_order_service["Order service<br/>[OrderService.java]"]
  node_order_dto["Order data<br/>[OrderDto.java]"]
end

subgraph group_messaging["Kafka messaging"]
  node_kafka_config["Topic configuration<br/>[KafkaConfig.java]"]
  node_kafka["Kafka topic"]
end

subgraph group_payments["Payment service"]
  node_consumer["Order consumer<br/>[OrderConsumer.java]"]
  node_payment_service["Payment service"]
  node_payment_dto["Order data<br/>[OrderDto.java]"]
  node_repository["Payment repository"]
  node_payment_entity["Payment record<br/>[Payment.java]"]
  node_database[("Payment database")]
end

node_client(("Order client"))

node_client -->|"submits order"| node_controller
node_controller -->|"places order"| node_order_service
node_order_service -->|"publishes event"| node_kafka
node_kafka_config -->|"declares topic"| node_kafka
node_kafka -->|"delivers event"| node_consumer
node_consumer -->|"processes payment"| node_payment_service
node_payment_service -->|"saves payment"| node_repository
node_repository -->|"writes record"| node_database
node_payment_entity -->|"defines unique key"| node_database
node_consumer -->|"acknowledges message"| node_kafka

click node_controller "https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/controller/OrderController.java"
click node_order_service "https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/service/OrderService.java"
click node_order_dto "https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/dto/OrderDto.java"
click node_kafka_config "https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/config/KafkaConfig.java"
click node_consumer "https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/listener/OrderConsumer.java"
click node_payment_service "https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/service/PaymentService.java"
click node_payment_dto "https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/dto/OrderDto.java"
click node_repository "https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/respository/PaymentRepository.java"
click node_payment_entity "https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/entity/Payment.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_controller,node_order_service,node_order_dto,node_client toneBlue
class node_kafka_config,node_kafka toneAmber
class node_consumer,node_payment_service,node_payment_dto,node_repository,node_payment_entity,node_database toneMint
```

## Components

### Order service

- [Order controller](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/controller/OrderController.java): `order-service/src/main/java/com/javatechie/controller/OrderController.java`
- [Order service](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/service/OrderService.java): `order-service/src/main/java/com/javatechie/service/OrderService.java`
- [Order data](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/dto/OrderDto.java): `order-service/src/main/java/com/javatechie/dto/OrderDto.java`

### Kafka messaging

- [Topic configuration](https://github.com/java-techie-jt/kafka-idempotency/blob/main/order-service/src/main/java/com/javatechie/config/KafkaConfig.java): `order-service/src/main/java/com/javatechie/config/KafkaConfig.java`
- **Kafka topic**

### Payment service

- [Order consumer](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/listener/OrderConsumer.java): `payment-service/src/main/java/com/javatechie/listener/OrderConsumer.java`
- [Payment service](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/service/PaymentService.java): `payment-service/src/main/java/com/javatechie/service/PaymentService.java`
- [Order data](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/dto/OrderDto.java): `payment-service/src/main/java/com/javatechie/dto/OrderDto.java`
- [Payment repository](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/respository/PaymentRepository.java): `payment-service/src/main/java/com/javatechie/respository/PaymentRepository.java`
- [Payment record](https://github.com/java-techie-jt/kafka-idempotency/blob/main/payment-service/src/main/java/com/javatechie/entity/Payment.java): `payment-service/src/main/java/com/javatechie/entity/Payment.java`
- **Payment database**

### Other components

- **Order client**

## Connections

- Order client → Order controller: submits order
- Order controller → Order service: places order
- Order service → Kafka topic: publishes event
- Topic configuration → Kafka topic: declares topic
- Kafka topic → Order consumer: delivers event
- Order consumer → Payment service: processes payment
- Payment service → Payment repository: saves payment
- Payment repository → Payment database: writes record
- Payment record → Payment database: defines unique key
- Order consumer → Kafka topic: acknowledges message
