17.2. 降级 Kafka


Kafka 版本降级由 Cluster Operator 执行。

17.2.1. 降级的 Kafka 版本兼容性

Kafka 降级取决于兼容的当前和目标 Kafka 版本,以及记录信息的状态。

如果以前的一个版本不支持在集群中已使用过的任何 inter.broker.protocol.version 设置,或者消息已被添加到使用较新的 log.message.format.version 的消息日志中时,则无法恢复到这个以前的 Kafka 版本。

inter.broker.protocol.version 决定用于代理存储的持久元数据的模式,如写入 __consumer_offsets 的消息的 schema。如果您降级到 Kafka 版本,它不知道之前在代理遇到数据的集群中使用的 inter.broker.protocol.version

如果目标降级版本 Kafka 具有:

  • 与当前版本 相同的 log.message.format.version,Cluster Operator 通过执行代理的单一滚动重启来降级。
  • 一个不同的 log.message.format.version,只有运行的集群始终log.message.format.version 设置为降级版本使用的版本时,才可以下载。这通常只有在更改 log.message.format.version 前中止升级过程时才会出现这种情况。在这种情况下,降级需要:

    • 如果两个版本的 interbroker 协议不同,则两个代理的滚动重启
    • 单个滚动重启(如果相同)

如果新版本使用了之前版本不支持的 log.message.format.version则无法 降级,包括在使用 log.message.format.version 的默认值时。例如,此资源可以降级到 Kafka 版本 3.3.1,因为 log.message.format.version 没有被改变:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  # ...
  kafka:
    version: 3.4.0
    config:
      log.message.format.version: "3.3"
      # ...
Copy to Clipboard Toggle word wrap

如果 log.message.format.version 设置为 "3.4" 或没有值,则无法降级,因此该参数将使用 3.4.0 代理的默认值 3.4。

重要

从 Kafka 3.0.0 开始,当将 inter.broker.protocol.version 设置为 3.0 或更高版本时,log.message.format.version 选项将被忽略,不需要设置。

17.2.2. 降级 Kafka 代理和客户端应用程序

将 AMQ Streams Kafka 集群降级到 Kafka 的较低(以前)版本,如从 3.4.0 降级到 3.3.1。

先决条件

  • Cluster Operator 已启动并在运行。
  • 在降级 AMQ Streams Kafka 集群前,检查 Kafka 资源中的以下内容:

    • 重要信息: Kafka 版本的兼容性
    • Kafka.spec.kafka.config 不包含被降级到的 Kafka 版本不支持的选项。
    • Kafka.spec.kafka.config 有一个 log.message.format.versioninter.broker.protocol.version,由被降级到的 Kafka 版本支持。

      从 Kafka 3.0.0 开始,当将 inter.broker.protocol.version 设置为 3.0 或更高版本时,log.message.format.version 选项将被忽略,不需要设置。

流程

  1. 更新 Kafka 集群配置。

    oc edit kafka KAFKA-CONFIGURATION-FILE
    Copy to Clipboard Toggle word wrap
  2. 更改 Kafka.spec.kafka.version 以指定之前的版本。

    例如,如果从 Kafka 3.4.0 降级到 3.3.1:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    spec:
      # ...
      kafka:
        version: 3.3.1 
    1
    
        config:
          log.message.format.version: "3.3" 
    2
    
          inter.broker.protocol.version: "3.3" 
    3
    
          # ...
    Copy to Clipboard Toggle word wrap
    1
    Kafka 版本被改为之前的版本。
    2
    消息格式版本保持不变。
    3
    inter-broker 协议版本不会改变。
    注意

    log.message.format.versioninter.broker.protocol.version 的值必须是字符串,以防止它们被解释为浮点号。

  3. 如果 Kafka 版本的镜像与 Cluster Operator 的 STRIMZI_KAFKA_IMAGES 中定义的镜像不同,请更新 Kafka.spec.kafka.image

    请查看 第 16.6.3 节 “Kafka 版本和镜像映射”

  4. 保存并退出编辑器,然后等待滚动更新完成。

    检查日志中的更新,或者通过观察 pod 状态转换:

    oc logs -f CLUSTER-OPERATOR-POD-NAME | grep -E "Kafka version downgrade from [0-9.]+ to [0-9.]+, phase ([0-9]+) of \1 completed"
    Copy to Clipboard Toggle word wrap
    oc get pod -w
    Copy to Clipboard Toggle word wrap

    检查 Cluster Operator 日志中的 INFO 级别信息:

    Reconciliation #NUM(watch) Kafka(NAMESPACE/NAME): Kafka version downgrade from FROM-VERSION to TO-VERSION, phase 1 of 1 completed
    Copy to Clipboard Toggle word wrap
  5. 降级所有客户端应用程序(消费者),以使用客户端二进制文件的早期版本。

    Kafka 集群和客户端现在使用以前的 Kafka 版本。

  6. 如果您要恢复到早于 1.7 的 AMQ Streams 版本,它使用 ZooKeeper 来存储主题元数据,请从 Kafka 集群中删除内部主题存储主题。

    oc run kafka-admin -ti --image=registry.redhat.io/amq-streams/kafka-34-rhel8:2.4.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
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat