Chapter 5. Using the Topic Operator

5.1. Topic Operator usage recommendations

  • Be consistent and always operate on KafkaTopic resources or always operate on topics directly. Avoid routinely using both methods for a given topic.
  • When creating a KafkaTopic resource:

    • Remember that the name cannot be changed later.
    • Choose a name for the KafkaTopic resource that reflects the name of the topic it describes.
    • Ideally the KafkaTopic.metadata.name should be the same as its spec.topicName. To do this, the topic name will have to be a valid Kubernetes resource name.
  • When creating a topic:

    • Remember that the name cannot be changed later.
    • It is best to use a name that is a valid Kubernetes resource name, otherwise the operator will have to modify the name when creating the corresponding KafkaTopic.

5.2. Creating a topic

This procedure describes how to create a Kafka topic using a KafkaTopic OpenShift resource.

Prerequisites

  • A running Kafka cluster.
  • A running Topic Operator.

Procedure

  1. Prepare a file containing the KafkaTopic to be created

    An example KafkaTopic

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaTopic
    metadata:
      name: orders
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 10
      replicas: 2

    Note

    It is recommended that the topic name given is a valid OpenShift resource name, as it is then not necessary to set the KafkaTopic.spec.topicName property. The KafkaTopic.spec.topicName cannot be changed after creation.

    Note

    The KafkaTopic.spec.partitions cannot be decreased.

  2. Create the KafkaTopic resource in OpenShift.

    On OpenShift this can be done using oc apply:

    oc apply -f your-file

Additional resources

5.3. Changing a topic

This procedure describes how to change the configuration of an existing Kafka topic by using a KafkaTopic OpenShift resource.

Prerequisites

  • A running Kafka cluster.
  • A running Topic Operator.
  • An existing KafkaTopic to be changed.

Procedure

  1. Prepare a file containing the desired KafkaTopic

    An example KafkaTopic

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaTopic
    metadata:
      name: orders
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 16
      replicas: 2

    Tip

    You can get the current version of the resource using oc get kafkatopic orders -o yaml.

    Note

    Changing topic names using the KafkaTopic.spec.topicName variable and decreasing partition size using the KafkaTopic.spec.partitions variable is not supported by Kafka.

    Caution

    Increasing spec.partitions for topics with keys will change how records are partitioned, which can be particularly problematic when the topic uses semantic partitioning.

  2. Update the KafkaTopic resource in OpenShift.

    On OpenShift this can be done using oc apply:

    oc apply -f your-file

Additional resources

5.4. Deleting a topic

This procedure describes how to delete a Kafka topic using a KafkaTopic OpenShift resource.

Prerequisites

  • A running Kafka cluster.
  • A running Topic Operator.
  • An existing KafkaTopic to be deleted.
  • delete.topic.enable=true (default)
Note

The delete.topic.enable property must be set to true in Kafka.spec.kafka.config. Otherwise, the steps outlined here will delete the KafkaTopic resource, but the Kafka topic and its data will remain. After reconciliation by the Topic Operator, the custom resource is then recreated.

Procedure

  • Delete the KafkaTopic resource in OpenShift.

    On OpenShift this can be done using oc:

    oc delete kafkatopic your-topic-name

Additional resources