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/v1beta1
kind: KafkaTopic
metadata:
  name: topic-name-1
  labels:
    strimzi.io/cluster: my-cluster

该标签供主题 Operator 用于标识 KafkaTopic 资源、创建一个新主题,以及后续处理该主题。

如果标签与 Kafka 集群不匹配,主题 Operator 无法识别 KafkaTopic,且不会创建该主题。

5.2.1.2. 处理主题的更改

Topic Operator 必须解决的一个根本问题是没有单一数据源:KafkaTopic 资源和 Kafka 主题都可以独立于 Operator 修改。复杂的情况是,Topic Operator 可能无法实时观察每个末尾的更改(例如,操作器可能会停机)。

为解决这个问题,操作员会保留自己的专用副本,其中包含每个主题的信息。当 Kafka 集群或 OpenShift 中发生更改时,它会同时查看其他系统的状态及其私有副本,以确定需要更改的内容以保持一切同步。每当操作器启动时都会发生同样的事情,并在操作器运行时定期进行。

例如,假设主题 Operator 未在运行,并创建一个 KafkaTopic my-topic。当 Operator 启动时,它将缺少"my-topic"的私有副本,因此可以推断出 KafkaTopic 自上次运行以来已创建。操作器将创建与 my-topic 对应的主题,同时存储 my-topic 的元数据私有副本。

私有副本允许操作员应对在 Kafka 和 OpenShift 中主题配置都已更改的情况,只要这些更改不兼容(例如,更改同一主题配置键,但更改为不同的值)。如果出现不兼容的更改,Kafka 配置胜出,KafkaTopic 将更新来反映这一点。

私有副本保存在 Kafka 本身使用的同一 ZooKeeper 识别中。这缓解了可用性问题,因为如果 ZooKeeper 没有运行,则 Kafka 本身将无法运行,因此即使其无状态也少于 Operator 的可用性。

5.2.1.3. Kafka 主题使用建议

处理主题时,应保持一致。始终在 OpenShift 中直接对 KafkaTopic 资源或主题运行。对于给定主题,避免在这两种方法之间进行定期切换。

使用反映主题性质的主题名称,并记住以后无法更改名称。

如果在 Kafka 中创建主题,请使用有效的 OpenShift 资源名称,否则 Topic Operator 将需要使用符合 OpenShift 规则的名称创建对应的 KafkaTopic

注意

OpenShift 中的标识符和名称建议在 OpenShift 社区文章中概述了标识符和名称

5.2.1.4. Kafka 主题命名约定

Kafka 和 OpenShift 分别为 Kafka 和 KafkaTopic.metadata.name 中的主题命名实施自己的验证规则。每个名称都无效。

使用 spec.topicName 属性,可以在 Kafka 中创建有效的主题,其名称对 OpenShift 中的 Kafka 主题无效。

spec.topicName 属性继承 Kafka 命名验证规则:

  • 名称不能超过 249 个字符。
  • Kafka 主题的有效字符为 ASCII 字母数字、._-
  • 该名称不能为. 或 . 但是, 可以在 名称中使用,如 exampleTopic. or .exampleTopic

不得更改 spec.topicName

例如:

apiVersion: {KafkaApiVersion}
kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: topicName-1 1
  # ...
1
在 OpenShift 中,大写无效。

不能改为:

apiVersion: {KafkaApiVersion}
kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: name-2
  # ...
注意

一些 Kafka 客户端应用程序(如 Kafka Streams)可以以编程方式在 Kafka 中创建主题。如果这些主题的名称具有无效的 OpenShift 资源名称,Topic Operator 会根据 Kafka 名称为其指定有效的名称。将替换无效字符,并在名称中附加一个哈希值。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.