# sainsburys-tech/kafka-ui architecture

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

- Interactive diagram: https://gitdiagram.com/sainsburys-tech/kafka-ui
- Repository: https://github.com/sainsburys-tech/kafka-ui

## Overview

Kafbat UI is a browser-based Kafka operations console. Users inspect clusters and brokers, manage topics and access controls, browse or produce messages, and monitor consumer groups and metrics. The API organizes these operations around configured Kafka clusters and Kafka’s admin client; specialized services cover Connect, schemas, KSQL, topic analysis, and observability. Authentication and RBAC govern access, while message serialization and masking support safer data inspection. The README establishes the product capabilities; source excerpts and the index confirm only some internal calls, so other capability links are shown as unverified.

Main entry points: [`frontend/src/components/App.tsx`](https://github.com/sainsburys-tech/kafka-ui/blob/main/frontend/src/components/App.tsx) (Web UI), [`api/src/main/java/io/kafbat/ui/service/TopicsService.java`](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/TopicsService.java) (Topic management), [`api/src/main/java/io/kafbat/ui/service/AdminClientService.java`](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/AdminClientService.java) (Admin client access), [`api/src/main/java/io/kafbat/ui/config/auth/AbstractAuthSecurityConfig.java`](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/config/auth/AbstractAuthSecurityConfig.java) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webapp["Web UI<br/>[App.tsx]"]
end

subgraph group_operations["Kafka operations"]
  node_clusterconfig["Cluster configuration"]
  node_clusters["Cluster model<br/>[KafkaCluster.java]"]
  node_topics["Topic management<br/>[TopicsService.java]"]
  node_topicmodel["Topic details<br/>[InternalTopic.java]"]
  node_adminservice["Admin client access"]
  node_adminclient["Kafka admin operations"]
  node_acls["ACL management<br/>[AclsService.java]"]
  node_analysis["Topic analysis"]
end

subgraph group_integrations["Services and integrations"]
  node_connect["Kafka Connect"]
  node_schema["Schema Registry"]
  node_ksql["KSQL queries<br/>[KsqlServiceV2.java]"]
  node_metrics["Metrics collection"]
  node_metricsout["Prometheus export"]
  node_serde["Message serialization"]
  node_masking["Message masking<br/>[DataMasking.java]"]
end

subgraph group_security["Identity and access"]
  node_authentication["Authentication"]
  node_accesscontrol["RBAC decisions"]
  node_accesscontext["Access request model<br/>[AccessContext.java]"]
end

node_operator(("Kafka operator"))

node_operator -->|"uses"| node_webapp
node_webapp -.->|"manages topics"| node_topics
node_webapp -.->|"manages connectors"| node_connect
node_webapp -.->|"manages schemas"| node_schema
node_webapp -.->|"runs queries"| node_ksql
node_webapp -.->|"views metrics"| node_metrics
node_clusterconfig -.->|"configures"| node_clusters
node_topics -->|"requests client"| node_adminservice
node_adminservice -.->|"provides client"| node_adminclient
node_topics -->|"builds details"| node_topicmodel
node_operator -.->|"configures permissions"| node_acls
node_operator -.->|"analyzes topics"| node_analysis
node_operator -.->|"views encoded messages"| node_serde
node_operator -.->|"protects message data"| node_masking
node_operator -.->|"signs in"| node_authentication
node_authentication -.->|"supplies identity"| node_accesscontrol
node_accesscontrol -->|"checks permissions"| node_accesscontext
node_operator -.->|"exports metrics"| node_metricsout

click node_webapp "https://github.com/sainsburys-tech/kafka-ui/blob/main/frontend/src/components/App.tsx"
click node_clusterconfig "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java"
click node_clusters "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/KafkaCluster.java"
click node_topics "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/TopicsService.java"
click node_topicmodel "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/InternalTopic.java"
click node_adminservice "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/AdminClientService.java"
click node_adminclient "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/ReactiveAdminClient.java"
click node_acls "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/acl/AclsService.java"
click node_analysis "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/analyze/TopicAnalysisService.java"
click node_connect "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/KafkaConnectService.java"
click node_schema "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/SchemaRegistryService.java"
click node_ksql "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/ksql/KsqlServiceV2.java"
click node_metrics "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/metrics/scrape/MetricsScraper.java"
click node_metricsout "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/metrics/prometheus/PrometheusMetricsExposer.java"
click node_serde "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/serdes/SerdesInitializer.java"
click node_masking "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/masking/DataMasking.java"
click node_authentication "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/config/auth/AbstractAuthSecurityConfig.java"
click node_accesscontrol "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/rbac/AccessControlService.java"
click node_accesscontext "https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/rbac/AccessContext.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_webapp toneBlue
class node_clusterconfig,node_clusters,node_topics,node_topicmodel,node_adminservice,node_adminclient,node_acls,node_analysis toneAmber
class node_connect,node_schema,node_ksql,node_metrics,node_metricsout,node_serde,node_masking toneMint
class node_authentication,node_accesscontrol,node_accesscontext toneRose
class node_operator toneIndigo
```

## Components

### Web experience

- [Web UI](https://github.com/sainsburys-tech/kafka-ui/blob/main/frontend/src/components/App.tsx): `frontend/src/components/App.tsx`

### Kafka operations

- [Cluster configuration](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java): `api/src/main/java/io/kafbat/ui/config/ClustersProperties.java`
- [Cluster model](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/KafkaCluster.java): `api/src/main/java/io/kafbat/ui/model/KafkaCluster.java`
- [Topic management](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/TopicsService.java): `api/src/main/java/io/kafbat/ui/service/TopicsService.java`
- [Topic details](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/InternalTopic.java): `api/src/main/java/io/kafbat/ui/model/InternalTopic.java`
- [Admin client access](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/AdminClientService.java): `api/src/main/java/io/kafbat/ui/service/AdminClientService.java`
- [Kafka admin operations](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/ReactiveAdminClient.java): `api/src/main/java/io/kafbat/ui/service/ReactiveAdminClient.java`
- [ACL management](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/acl/AclsService.java): `api/src/main/java/io/kafbat/ui/service/acl/AclsService.java`
- [Topic analysis](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/analyze/TopicAnalysisService.java): `api/src/main/java/io/kafbat/ui/service/analyze/TopicAnalysisService.java`

### Services and integrations

- [Kafka Connect](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/KafkaConnectService.java): `api/src/main/java/io/kafbat/ui/service/KafkaConnectService.java`
- [Schema Registry](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/SchemaRegistryService.java): `api/src/main/java/io/kafbat/ui/service/SchemaRegistryService.java`
- [KSQL queries](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/ksql/KsqlServiceV2.java): `api/src/main/java/io/kafbat/ui/service/ksql/KsqlServiceV2.java`
- [Metrics collection](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/metrics/scrape/MetricsScraper.java): `api/src/main/java/io/kafbat/ui/service/metrics/scrape/MetricsScraper.java`
- [Prometheus export](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/metrics/prometheus/PrometheusMetricsExposer.java): `api/src/main/java/io/kafbat/ui/service/metrics/prometheus/PrometheusMetricsExposer.java`
- [Message serialization](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/serdes/SerdesInitializer.java): `api/src/main/java/io/kafbat/ui/serdes/SerdesInitializer.java`
- [Message masking](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/masking/DataMasking.java): `api/src/main/java/io/kafbat/ui/service/masking/DataMasking.java`

### Identity and access

- [Authentication](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/config/auth/AbstractAuthSecurityConfig.java): `api/src/main/java/io/kafbat/ui/config/auth/AbstractAuthSecurityConfig.java`
- [RBAC decisions](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/service/rbac/AccessControlService.java): `api/src/main/java/io/kafbat/ui/service/rbac/AccessControlService.java`
- [Access request model](https://github.com/sainsburys-tech/kafka-ui/blob/main/api/src/main/java/io/kafbat/ui/model/rbac/AccessContext.java): `api/src/main/java/io/kafbat/ui/model/rbac/AccessContext.java`

### Other components

- **Kafka operator**

## Connections

- Kafka operator → Web UI: uses
- Web UI → Topic management: manages topics
- Web UI → Kafka Connect: manages connectors
- Web UI → Schema Registry: manages schemas
- Web UI → KSQL queries: runs queries
- Web UI → Metrics collection: views metrics
- Cluster configuration → Cluster model: configures (evidence: `api/src/main/java/io/kafbat/ui/model/KafkaCluster.java`)
- Topic management → Admin client access: requests client (evidence: `api/src/main/java/io/kafbat/ui/service/TopicsService.java`)
- Admin client access → Kafka admin operations: provides client (evidence: `api/src/main/java/io/kafbat/ui/service/AdminClientService.java`)
- Topic management → Topic details: builds details (evidence: `api/src/main/java/io/kafbat/ui/service/TopicsService.java`)
- Kafka operator → ACL management: configures permissions
- Kafka operator → Topic analysis: analyzes topics
- Kafka operator → Message serialization: views encoded messages
- Kafka operator → Message masking: protects message data
- Kafka operator → Authentication: signs in
- Authentication → RBAC decisions: supplies identity
- RBAC decisions → Access request model: checks permissions (evidence: `api/src/main/java/io/kafbat/ui/service/rbac/AccessControlService.java`)
- Kafka operator → Prometheus export: exports metrics
