You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境Kafka 2.7滚动升级至无ZooKeeper的3.X版本数据无损可行性咨询

从Kafka 2.7(ZK依赖)滚动升级到3.X(KRaft模式)的可行方案

完全可以通过滚动升级+元数据迁移的方式完成版本迭代,且能严格保证无数据丢失。以下是针对你5台Broker、RHEL7.9环境的具体操作流程:

前置准备

  • JDK版本适配:Kafka 3.X要求JDK 11+,在RHEL7.9上可通过yum install java-11-openjdk-devel安装,确保所有Broker节点JDK版本一致。
  • 备份关键数据:
    • 用ZK客户端导出元数据:zkCli.sh -server <ZK地址> get /brokers/ids、get /brokers/topics等,或直接备份ZK数据目录。
    • 备份每个Broker的本地数据目录(默认/var/lib/kafka),可使用tar -czf kafka-data-backup.tar.gz /var/lib/kafka。
  • 预测试配置:提前准备3.X版本的配置文件,保留原broker.id、主题相关配置,暂时保留zookeeper.connect,新增inter.broker.protocol.version=2.7、log.message.format.version=2.7。

第一步:滚动升级到3.X的ZK兼容模式

Kafka 3.X仍支持ZK作为元数据存储,先完成这一步的滚动升级,确保集群稳定:

  • 逐个操作Broker:
    1. 停止目标Broker:systemctl stop kafka
    2. 替换3.X二进制包(解压后覆盖原安装目录,或用新目录并修改系统服务配置)
    3. 替换预准备的3.X配置文件
    4. 启动Broker:systemctl start kafka
    5. 等待Broker加入集群,用kafka-topics.sh --bootstrap-server <Broker地址>:9092 --list确认集群状态正常,ISR副本完整。
  • 所有Broker升级完成后,更新配置:
    1. 将inter.broker.protocol.version修改为对应3.X版本的协议(如3.5版本为3.5-IV2)
    2. 逐个重启Broker,确保集群协议平滑切换
    3. 再将log.message.format.version修改为3.X版本,再次逐个重启Broker,完成ZK模式下的3.X升级。

第二步:滚动迁移到KRaft模式(移除ZK依赖)

这一步是核心,需严格按流程操作,避免元数据丢失:

  1. 生成KRaft集群ID:在任意Broker执行kafka-storage.sh random-uuid,记录生成的UUID(如abc123)。
  2. 导出ZK元数据到KRaft格式:
    kafka-metadata-shell.sh --zookeeper-connect <ZK集群地址> --command "export --cluster-id <生成的UUID> --output-dir /tmp/kraft-metadata"
    
  3. 配置KRaft参数:修改每个Broker的配置文件:
    • 删除zookeeper.connect配置项
    • 添加:
      process.roles=broker
      node.id=<原broker.id>
      controller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093  # 选3个Broker作为控制器节点
      listeners=PLAINTEXT://:9092,CONTROLLER://:9093
      listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      
  4. 初始化Broker存储:在每个Broker执行:
    kafka-storage.sh format --cluster-id <生成的UUID> --config /etc/kafka/server.properties
    
  5. 滚动切换Broker:
    • 逐个停止ZK模式的Broker,用新的KRaft配置启动
    • 启动后用kafka-broker-api-versions.sh --bootstrap-server <Broker地址>:9092确认Broker正常加入KRaft集群
    • 所有Broker切换完成后,确认集群状态稳定,再停止ZK集群。

关键注意事项

  • 升级全程禁止执行主题创建、分区调整、副本重分配等操作。
  • 必须先在测试环境完整复刻流程,验证无误后再操作生产集群。
  • KRaft控制器节点至少需要3个,保证集群高可用,避免脑裂。
  • 升级后持续监控集群的ISR状态、生产消费链路,确保数据无丢失。

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:25:16