# strimzi/strimzi-kafka-operator architecture

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

- Interactive diagram: https://gitdiagram.com/strimzi/strimzi-kafka-operator
- Repository: https://github.com/strimzi/strimzi-kafka-operator

## Overview

Strimzi is a Kubernetes and OpenShift operator for running and managing Apache Kafka. The principal workflow is an administrator declaring Kafka configuration as custom resources; the cluster operator reconciles cluster resources, while topic and user operators separately manage Kafka topics and user credentials. The API models expose additional managed capabilities, including Connect, MirrorMaker 2, Bridge, and rebalancing. The tree and README establish these product areas, but most implementation excerpts were not sampled, so the graph omits uncertain internal call wiring.

Main entry points: [`cluster-operator/src/main/java/io/strimzi/operator/cluster/ClusterOperator.java`](https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/ClusterOperator.java) (Cluster operator), [`cluster-operator/src/main/java/io/strimzi/operator/cluster/operator/assembly/StrimziPodSetController.java`](https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/operator/assembly/StrimziPodSetController.java) (PodSet controller), [`topic-operator/src/main/java/io/strimzi/operator/topic/BatchingTopicController.java`](https://github.com/strimzi/strimzi-kafka-operator/blob/main/topic-operator/src/main/java/io/strimzi/operator/topic/BatchingTopicController.java) (Topic operator), [`user-operator/src/main/java/io/strimzi/operator/user/UserController.java`](https://github.com/strimzi/strimzi-kafka-operator/blob/main/user-operator/src/main/java/io/strimzi/operator/user/UserController.java) (User operator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Cluster control"]
  node_cluster_operator["Cluster operator"]
  node_podset_controller["PodSet controller"]
  node_storage_diff["Storage change analysis<br/>[StorageDiff.java]"]
end

subgraph group_kafka["Kafka resources"]
  node_topic_operator["Topic operator"]
  node_user_operator["User operator"]
end

subgraph group_integrations["Kafka integrations"]
  node_connect["Kafka Connect"]
  node_mirror["MirrorMaker 2"]
  node_bridge["Kafka Bridge"]
  node_rebalance["Cluster rebalancing"]
end

subgraph group_api["Resource API"]
  node_crds["Resource definitions<br/>[Crds.java]"]
  node_kafka_model["Kafka configuration<br/>[Kafka.java]"]
  node_topic_model["Topic configuration<br/>[KafkaTopic.java]"]
  node_user_model["User configuration<br/>[KafkaUser.java]"]
  node_connect_model["Connect configuration<br/>[KafkaConnect.java]"]
  node_mirror_model["MirrorMaker configuration"]
  node_bridge_model["Bridge configuration<br/>[KafkaBridge.java]"]
  node_rebalance_model["Rebalance configuration"]
end

node_admin(("Administrator"))
node_k8s["Kubernetes API"]
node_broker["Kafka cluster"]

node_admin -->|"applies resources"| node_k8s
node_k8s -->|"validates kinds"| node_crds
node_k8s -->|"provides events"| node_cluster_operator
node_cluster_operator -->|"reconciles desired state"| node_kafka_model
node_cluster_operator -->|"manages pods"| node_podset_controller
node_cluster_operator -->|"checks storage changes"| node_storage_diff
node_podset_controller -->|"updates pods"| node_k8s
node_cluster_operator -->|"manages cluster resources"| node_k8s
node_cluster_operator -.->|"manages integration"| node_connect
node_cluster_operator -.->|"manages replication"| node_mirror
node_cluster_operator -.->|"manages access"| node_bridge
node_cluster_operator -.->|"handles requests"| node_rebalance
node_kafka_model -->|"configures cluster"| node_cluster_operator
node_topic_model -->|"requests topic state"| node_topic_operator
node_user_model -->|"requests user state"| node_user_operator
node_topic_operator -->|"reconciles topics"| node_broker
node_user_operator -->|"manages users"| node_broker
node_connect -.->|"connects to"| node_broker
node_mirror -.->|"replicates Kafka data"| node_broker
node_bridge -.->|"provides HTTP access"| node_broker
node_rebalance -.->|"requests cluster changes"| node_broker

click node_crds "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/Crds.java"
click node_kafka_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/kafka/Kafka.java"
click node_topic_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/topic/KafkaTopic.java"
click node_user_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/user/KafkaUser.java"
click node_connect_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/connect/KafkaConnect.java"
click node_mirror_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2.java"
click node_bridge_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/bridge/KafkaBridge.java"
click node_rebalance_model "https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalance.java"
click node_cluster_operator "https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/ClusterOperator.java"
click node_podset_controller "https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/operator/assembly/StrimziPodSetController.java"
click node_storage_diff "https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/model/StorageDiff.java"
click node_topic_operator "https://github.com/strimzi/strimzi-kafka-operator/blob/main/topic-operator/src/main/java/io/strimzi/operator/topic/BatchingTopicController.java"
click node_user_operator "https://github.com/strimzi/strimzi-kafka-operator/blob/main/user-operator/src/main/java/io/strimzi/operator/user/UserController.java"
click node_connect "https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/connect"
click node_mirror "https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2"
click node_bridge "https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/bridge"
click node_rebalance "https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/rebalance"

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_cluster_operator,node_podset_controller,node_storage_diff toneBlue
class node_topic_operator,node_user_operator toneAmber
class node_connect,node_mirror,node_bridge,node_rebalance,node_k8s toneMint
class node_crds,node_kafka_model,node_topic_model,node_user_model,node_connect_model,node_mirror_model,node_bridge_model,node_rebalance_model toneRose
class node_admin,node_broker toneIndigo
```

## Components

### Cluster control

- [Cluster operator](https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/ClusterOperator.java): `cluster-operator/src/main/java/io/strimzi/operator/cluster/ClusterOperator.java`
- [PodSet controller](https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/operator/assembly/StrimziPodSetController.java): `cluster-operator/src/main/java/io/strimzi/operator/cluster/operator/assembly/StrimziPodSetController.java`
- [Storage change analysis](https://github.com/strimzi/strimzi-kafka-operator/blob/main/cluster-operator/src/main/java/io/strimzi/operator/cluster/model/StorageDiff.java): `cluster-operator/src/main/java/io/strimzi/operator/cluster/model/StorageDiff.java`

### Kafka resources

- [Topic operator](https://github.com/strimzi/strimzi-kafka-operator/blob/main/topic-operator/src/main/java/io/strimzi/operator/topic/BatchingTopicController.java): `topic-operator/src/main/java/io/strimzi/operator/topic/BatchingTopicController.java`
- [User operator](https://github.com/strimzi/strimzi-kafka-operator/blob/main/user-operator/src/main/java/io/strimzi/operator/user/UserController.java): `user-operator/src/main/java/io/strimzi/operator/user/UserController.java`

### Kafka integrations

- [Kafka Connect](https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/connect): `api/src/main/java/io/strimzi/api/kafka/model/connect`
- [MirrorMaker 2](https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2): `api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2`
- [Kafka Bridge](https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/bridge): `api/src/main/java/io/strimzi/api/kafka/model/bridge`
- [Cluster rebalancing](https://github.com/strimzi/strimzi-kafka-operator/tree/main/api/src/main/java/io/strimzi/api/kafka/model/rebalance): `api/src/main/java/io/strimzi/api/kafka/model/rebalance`

### Resource API

- [Resource definitions](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/Crds.java): `api/src/main/java/io/strimzi/api/kafka/Crds.java`
- [Kafka configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/kafka/Kafka.java): `api/src/main/java/io/strimzi/api/kafka/model/kafka/Kafka.java`
- [Topic configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/topic/KafkaTopic.java): `api/src/main/java/io/strimzi/api/kafka/model/topic/KafkaTopic.java`
- [User configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/user/KafkaUser.java): `api/src/main/java/io/strimzi/api/kafka/model/user/KafkaUser.java`
- [Connect configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/connect/KafkaConnect.java): `api/src/main/java/io/strimzi/api/kafka/model/connect/KafkaConnect.java`
- [MirrorMaker configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2.java): `api/src/main/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2.java`
- [Bridge configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/bridge/KafkaBridge.java): `api/src/main/java/io/strimzi/api/kafka/model/bridge/KafkaBridge.java`
- [Rebalance configuration](https://github.com/strimzi/strimzi-kafka-operator/blob/main/api/src/main/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalance.java): `api/src/main/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalance.java`

### Other components

- **Administrator**
- **Kubernetes API**
- **Kafka cluster**

## Connections

- Administrator → Kubernetes API: applies resources
- Kubernetes API → Resource definitions: validates kinds
- Kubernetes API → Cluster operator: provides events
- Cluster operator → Kafka configuration: reconciles desired state
- Cluster operator → PodSet controller: manages pods
- Cluster operator → Storage change analysis: checks storage changes
- PodSet controller → Kubernetes API: updates pods
- Cluster operator → Kubernetes API: manages cluster resources
- Cluster operator → Kafka Connect: manages integration
- Cluster operator → MirrorMaker 2: manages replication
- Cluster operator → Kafka Bridge: manages access
- Cluster operator → Cluster rebalancing: handles requests
- Kafka configuration → Cluster operator: configures cluster
- Topic configuration → Topic operator: requests topic state
- User configuration → User operator: requests user state
- Topic operator → Kafka cluster: reconciles topics
- User operator → Kafka cluster: manages users
- Kafka Connect → Kafka cluster: connects to
- MirrorMaker 2 → Kafka cluster: replicates Kafka data
- Kafka Bridge → Kafka cluster: provides HTTP access
- Cluster rebalancing → Kafka cluster: requests cluster changes
