5.2. 使用主题 Operator
当您使用 KafkaTopic
资源创建、修改或删除主题时,Tpic Operator 可确保这些更改反映在 Kafka 集群中。
OpenShift 指南中的部署和升级 AMQ Streams 提供了部署 Topic Operator 的说明:
5.2.1. Kafka 主题资源
KafkaTopic
资源用于配置主题,包括分区和副本的数量。
KafkaTopic
的完整 schema 包括在 KafkaTopic schema
引用 中。
5.2.1.1. 为主题处理识别 Kafka 集群
KafkaTopic
资源包含一个标签,用于定义它所属的 Kafka 集群名称(从 Kafka
资源的名称衍生)。
例如:
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: topic-name-1 labels: strimzi.io/cluster: my-cluster
该标签供主题 Operator 用于标识 KafkaTopic
资源、创建一个新主题,以及后续处理该主题。
如果标签与 Kafka 集群不匹配,主题 Operator 无法识别 KafkaTopic
,且不会创建该主题。
5.2.1.2. Kafka 主题使用建议
处理主题时,应保持一致。始终在 OpenShift 中直接对 KafkaTopic
资源或主题运行。对于给定主题,避免在这两种方法之间进行定期切换。
使用反映主题性质的主题名称,并记住以后无法更改名称。
如果在 Kafka 中创建主题,请使用有效的 OpenShift 资源名称,否则 Topic Operator 将需要使用符合 OpenShift 规则的名称创建对应的 KafkaTopic
。
OpenShift 中的标识符和名称建议在 OpenShift 社区文章中概述了标识符和名称。
5.2.1.3. Kafka 主题命名约定
Kafka 和 OpenShift 分别为 Kafka 和 KafkaTopic.metadata.name
中的主题命名实施自己的验证规则。每个名称都无效。
使用 spec.topicName
属性,可以在 Kafka 中创建有效的主题,其名称对 OpenShift 中的 Kafka 主题无效。
spec.topicName
属性继承 Kafka 命名验证规则:
- 名称不能超过 249 个字符。
-
Kafka 主题的有效字符为 ASCII 字母数字、
.
、_
和-
。 -
该名称不能为. 或
.
。
但是,可以在
名称中使用,如exampleTopic. or
.exampleTopic
。
不得更改 spec.topicName
。
例如:
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: topic-name-1
spec:
topicName: topicName-1 1
# ...
- 1
- 在 OpenShift 中,大写无效。
不能改为:
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: topic-name-1 spec: topicName: name-2 # ...
一些 Kafka 客户端应用程序(如 Kafka Streams)可以以编程方式在 Kafka 中创建主题。如果这些主题的名称具有无效的 OpenShift 资源名称,Topic Operator 会根据 Kafka 名称为其提供有效的 metadata.name
。将替换无效字符,并在名称中附加一个哈希值。例如:
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: mytopic---c55e57fe2546a33f9e603caf57165db4072e827e spec: topicName: myTopic # ...