搜索

10.3. 处理对主题的更改

download PDF

主题 Operator 如何处理对主题的更改取决于 主题管理的模式

  • 对于单向主题管理,配置更改仅以一个方向:从 KafkaTopic 资源到 Kafka 主题。对 KafkaTopic 资源外管理的 Kafka 主题的任何更改都会被恢复。
  • 对于双向主题管理,配置更改会在 Kafka 主题和 KafkaTopic 资源之间同步。不兼容的更改会优先选择 Kafka 配置,并相应地调整 KafkaTopic 资源。

10.3.1. 双向主题管理的主题存储

对于双向主题管理,当没有单一数据源时,主题 Operator 能够处理对主题的更改。KafkaTopic 资源和 Kafka 主题可以独立修改,其中实时观察更改可能并不总是可行,特别是在 Topic Operator 无法正常工作时。为了解决这个问题,主题 Operator 维护一个主题存储,用于存储有关每个主题的主题配置信息。它将 Kafka 集群和 OpenShift 的状态与主题存储进行比较,以确定同步所需的更改。此评估在启动期间和定期的间隔发生,而主题 Operator 处于活跃状态时。

例如,如果主题 Operator 不活跃,并且在重启后会创建一个名为 my-topic 的新 KafkaTopic,则主题 Operator 会识别主题存储中没有 my-topic。它识别在最后一次操作后创建的 KafkaTopic。因此,主题 Operator 生成对应的 Kafka 主题,并将元数据保存在主题存储中。

主题存储可让 Topic Operator 管理在 Kafka 主题和 KafkaTopic 资源中更改主题配置的情况,只要更改兼容。当对 KafkaTopic 自定义资源更新或更改 Kafka 主题配置时,主题存储会在与 Kafka 集群协调后更新,只要更改兼容。

主题存储 基于 Kafka Streams 键-值机制,它使用 Kafka 主题来持久保留状态。主题元数据缓存在内存中,并在主题 Operator 本地访问。应用到本地内存缓存的操作更新会被保留到磁盘上的备份主题存储中。主题存储会与 Kafka 主题或 OpenShift KafkaTopic 自定义资源的更新同步。通过以这种方式设置主题存储快速处理操作,但内存中缓存崩溃,它会自动从持久性存储中重新填充。

内部主题支持处理主题存储中的主题元数据。

__strimzi_store_topic
用于存储主题元数据的输入主题
__strimzi-topic-operator-kstreams-topic-store-changelog
保留紧凑主题存储值的日志
警告

不要删除这些主题,因为它们对于 Topic Operator 的运行至关重要。

10.3.2. 将主题元数据从 ZooKeeper 迁移到主题存储

在以前的 Apache Kafka Streams 版本中,主题元数据存储在 ZooKeeper 中。主题存储会删除这个要求,将元数据带到 Kafka 集群,并受 Topic Operator 控制。

当升级到 Apache Kafka 2.7 的 Streams 时,对主题存储的转换到 Topic Operator 控制是无缝的。元数据从 ZooKeeper 找到并迁移,旧存储会被删除。

10.3.3. 降级到使用 ZooKeeper 存储主题元数据的 Apache Kafka 版本的 Streams

如果您要恢复到 1.7 之前的 Apache Kafka 的 Streams 版本,其使用 ZooKeeper 进行主题元数据存储,您仍将 Cluster Operator 降级到之前的版本,然后将 Kafka 代理和客户端应用程序降级到以前的 Kafka 版本。

但是,还必须使用 kafka-topics 命令删除为主题存储创建的主题,指定 Kafka 集群的 bootstrap 地址。例如:

oc run kafka-admin -ti --image=registry.redhat.io/amq-streams/kafka-37-rhel9:2.7.0 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete

该命令必须与监听程序的类型以及用于访问 Kafka 集群的身份验证对应。

主题 Operator 将从 Kafka 中的主题状态重建 ZooKeeper 主题元数据。

10.3.4. 自动创建主题

应用程序可以在 Kafka 集群中触发自动创建主题。默认情况下,Kafka 代理配置 auto.create.topics.enable 被设置为 true,允许代理在应用程序尝试从不存在的主题生成或消耗时自动创建主题。应用程序也可能使用 Kafka AdminClient 自动创建主题。当应用程序与 KafkaTopic 资源一起部署时,在主题 Operator 可以响应 KafkaTopic 前,集群中的自动主题创建可能会发生。

对于双向主题管理,主题 Operator 会同步主题和 KafkaTopic 资源之间的更改。

如果您使用单向主题管理,这可能意味着最初为应用部署创建的主题最初使用默认主题配置创建。如果主题 Operator 会尝试根据应用程序部署中包含的 KafkaTopic 资源规格重新配置主题,则操作可能会失败,因为不允许对配置进行所需的更改。例如,如果更改意味着减少主题分区的数量。因此,在使用单向主题管理时,建议在 Kafka 集群配置中禁用 auto.create.topics.enable

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.