Kafka 2.6.0升级到3.0.0怎么操作?能不停机平滑升级吗?

文章导读
Kafka 2.6.0 升级到 3.0.0 官方支持滚动升级,可以在不停机的情况下完成,但需要严格控制交互协议版本,并确认客户端兼容性。
📋 目录
  1. A 升级前检查
  2. B 二进制文件替换操作
  3. C 配置修改与滚动重启
  4. D 怎么验证是否生效
  5. E 升级回滚步骤
  6. F 常见坑
  7. G 参考来源
A A

Kafka 2.6.0 升级到 3.0.0 官方支持滚动升级,可以在不停机的情况下完成,但需要严格控制交互协议版本,并确认客户端兼容性。

先说结论:支持平滑升级,但要注意客户端兼容性和配置顺序,不可直接修改协议版本。

  • 适合:生产环境希望避免停机的场景
  • 先准备:确认客户端版本和 ZooKeeper 兼容性(ZK 需 3.4.14+)
  • 验收:升级后验证协议版本和消费延迟

升级前检查

在升级 Kafka 之前,必须确认 ZooKeeper 版本满足要求。Kafka 3.0.0 不再支持过低版本的 ZooKeeper。

Kafka 版本最低 ZooKeeper 版本推荐 ZooKeeper 版本
2.6.03.4.143.4.14+ / 3.5.7+
3.0.03.4.143.4.14+ / 3.5.7+

如果当前 ZooKeeper 版本低于 3.4.14,请先单独升级 ZooKeeper 集群,稳定后再进行 Kafka 升级。

二进制文件替换操作

建议采用目录切换的方式替换二进制文件,便于快速回滚。假设 Kafka 安装在 /opt/kafka

Kafka 2.6.0升级到3.0.0怎么操作?能不停机平滑升级吗?
# 1. 下载并解压新版本到独立目录
cd /opt
wget https://downloads.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz
tar -xzf kafka_2.13-3.0.0.tgz
mv kafka_2.13-3.0.0 kafka_3.0.0

# 2. 备份当前软链接(如果有)或当前目录
ln -sfn /opt/kafka_2.6.0 /opt/kafka_current_backup

# 3. 停止当前 Broker 进程
# 注意:滚动升级时逐个停止,不要一次性停止所有
bin/kafka-server-stop.sh

# 4. 修改软链接指向新版本(或手动替换 bin 目录)
ln -sfn /opt/kafka_3.0.0 /opt/kafka

# 5. 确保配置文件 server.properties 存在且路径正确
# 通常建议配置文件独立于二进制目录,启动时指定
# bin/kafka-server-start.sh config/server.properties

配置修改与滚动重启

升级过程中核心是修改 server.properties 配置,不要一次性改完。以下是关键配置项示例:

# 升级前保持原版本协议(所有 Broker 升级二进制期间保持此配置)
inter.broker.protocol.version=2.6
log.message.format.version=2.6

# 所有 Broker 升级完成后,再修改为 3.0
inter.broker.protocol.version=3.0
log.message.format.version=3.0

操作步骤:

  1. 逐个升级 Broker:停止一个 Broker,替换二进制文件为 3.0.0,保持配置文件中的协议版本为 2.6,启动 Broker。等待该 Broker 重新加入 ISR 列表。
  2. 重复步骤:对集群中所有 Broker 重复上述操作,直到所有节点都运行 3.0.0 二进制文件。
  3. 切换协议版本:所有 Broker 升级完成后,修改所有节点的 server.properties,将 inter.broker.protocol.versionlog.message.format.version 改为 3.0,逐个重启生效。

怎么验证是否生效

1. 检查 Broker 版本:使用命令行工具查看集群版本信息。

bin/kafka-broker-api-versions.sh `--bootstrap-server` localhost:9092

2. 观察日志:查看 logs/server.log,确认没有频繁的 Leader 选举或 ISR 收缩警告。

Kafka 2.6.0升级到3.0.0怎么操作?能不停机平滑升级吗?

3. 监控指标:观察消费者 lag 是否有异常堆积,确认生产写入正常。

4. 确认协议版本:使用 ZooKeeper 客户端或 Kafka 工具确认集群协议版本已更新。

升级回滚步骤

如果升级过程中出现严重问题,需立即回滚。注意:一旦协议版本升至 3.0 通常不可逆,回滚仅限于二进制版本回退且未修改协议版本的情况。

Kafka 2.6.0升级到3.0.0怎么操作?能不停机平滑升级吗?
# 1. 停止当前 Broker
bin/kafka-server-stop.sh

# 2. 恢复二进制软链接到旧版本
ln -sfn /opt/kafka_2.6.0 /opt/kafka

# 3. 恢复配置文件(如果修改过协议版本,必须改回 2.6)
# 编辑 server.properties
inter.broker.protocol.version=2.6
log.message.format.version=2.6

# 4. 启动 Broker
bin/kafka-server-start.sh config/server.properties

# 5. 验证集群状态恢复
bin/kafka-broker-api-versions.sh `--bootstrap-server` localhost:9092

常见坑

1. 客户端过旧:部分老旧客户端依赖已移除的 API,升级后可能报错,建议先在测试环境验证客户端兼容性。

2. ZooKeeper 版本:Kafka 3.0 仍依赖 ZooKeeper,确认现有 ZK 版本在支持范围内(3.4.14+),不要误以为 3.0 默认就是 KRaft 模式。

3. KRaft 混淆:Kafka 3.0 引入了 KRaft 预览特性,但默认仍是 ZooKeeper 模式。除非明确计划迁移,否则不要修改 process.roles 等相关配置。

4. 配置顺序错误:严禁在所有 Broker 升级完成前修改协议版本,这会导致集群分裂。

参考来源

  • Apache Kafka Documentation, "Upgrade Guide", https://kafka.apache.org/30/documentation.html#upgrade
  • Apache Kafka 3.0.0 Release Notes, "Notable Changes", https://kafka.apache.org/30/documentation.html#notable_changes