// Module included in the following assemblies:
//
// overview/assembly-overview-components.adoc
// assembly-using-the-topic-operator.adoc

[id='overview-concepts-topic-operator-{context}']
= Topic Operator

[role="_abstract"]
The Topic Operator provides a way of managing topics in a Kafka cluster through `KafkaTopic` resources.

.Example architecture for the Topic Operator

image:topic-operator.png[The Topic Operator manages topics for a Kafka cluster via KafkaTopic resources]

The Topic Operator manages Kafka topics by watching for `KafkaTopic` resources that describe Kafka topics, and ensuring that they are configured properly in the Kafka cluster.

When a `KafkaTopic` is created, deleted, or changed, the Topic Operator performs the corresponding action on the Kafka topic.

You can declare a `KafkaTopic` as part of your application's deployment and the Topic Operator manages the Kafka topic for you.

The Topic Operator operates in the following modes: 

Unidirectional mode:: Unidirectional mode means that the Topic Operator solely manages topics through the `KafkaTopic` resource. This mode does not require ZooKeeper and is compatible with using Strimzi in KRaft mode.

Bidirectional mode:: Bidirectional mode means that the Topic Operator can reconcile changes to a `KafkaTopic` resource to and from a Kafka cluster.
This means that you can update topics either through the `KafkaTopic` resource or directly in Kafka, and the Topic Operator will ensure that both sources are updated to reflect the changes. This mode requires ZooKeeper for cluster management. 
+
The Topic Operator maintains information about each topic in a _topic store_, which is continually synchronized with updates from Kubernetes `KafkaTopic` custom resources or Kafka topics.
Updates from operations applied to a local in-memory topic store are persisted to a backup topic store on disk.






