8.2. 降级 Kafka

Kafka 版本降级由 Cluster Operator 执行。

8.2.1. 降级的 Kafka 版本兼容性

Kafka 降级依赖于兼容的当前和目标 Kafka 版本,以及记录消息的状态。

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

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

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

  • 当前版本相同的 log.message.format.version,通过对代理执行一次滚动重启来降级 Cluster Operator。
  • 只有正在运行的集群 始终将 log.message.format.version 设置为由降级版本使用的版本,才可 使用不同的 log.message.format.version。这通常是在 log.message.format.version 改变前中止升级过程的情况。在这种情况下,降级需要:

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

如果新版本曾使用过上一版本不支持log.message.format.version,则无法进行降级,包括当使用了 log.message.format.version 的默认值时。例如,这个资源可以降级为 Kafka 版本 2.5.0,因为 log.message.format.version 尚未更改:

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
spec:
  # ...
  kafka:
    version: 2.6.0
    config:
      log.message.format.version: "2.5"
      # ...

如果 log.message.format.version 设置为 "2.6" 或没有值(因此 参数使用 2.6.0 代理 2.6 的默认值),则无法进行降级。