Chapter 5. Using the Topic Operator

5.1. Topic Operator usage recommendations

When working with topics, be consistent and always operate on either KafkaTopic resources or topics directly. Avoid routinely switching between both methods for a given topic.

Use topic names that reflect the nature of the topic, and remember that names cannot be changed later.

If creating a topic in Kafka, use a name that is a valid OpenShift resource name, otherwise the Topic Operator will need to create the corresponding KafkaTopic with a name that conforms to the OpenShift rules.

Note

Recommendations for identifiers and names in OpenShift are outlined in Identifiers and Names in OpenShift community article.

Kafka topic naming conventions

Kafka and OpenShift impose their own validation rules for the naming of topics in Kafka and KafkaTopic.metadata.name respectively. There are valid names for each which are invalid in the other.

Using the spec.topicName property, it is possible to create a valid topic in Kafka with a name that would be invalid for the KafkaTopic in OpenShift.

The spec.topicName property inherits Kafka naming validation rules:

  • The name must not be longer than 249 characters.
  • Valid characters for Kafka topics are ASCII alphanumerics, ., _, and -.
  • The name cannot be . or .., though . can be used in a name, such as exampleTopic. or .exampleTopic.

spec.topicName must not be changed.

For example:

kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: topicName-1 # Upper case is invalid in OpenShift
  # ...

cannot be changed to

kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: name-2
  # ...
Note

Some Kafka client applications, such as Kafka Streams, can create topics in Kafka programmatically. If those topics have names that are invalid OpenShift resource names, the Topic Operator gives them valid names based on the Kafka names. Invalid characters are replaced and a hash is appended to the name.

5.2. Creating a topic

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

Prerequisites

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.

    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

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.

    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 (typically deployed with the Entity 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.

    This can be done using oc delete:

    oc delete kafkatopic your-topic-name

Additional resources