生产环境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。
- 用ZK客户端导出元数据:
- 预测试配置:提前准备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:
- 停止目标Broker:
systemctl stop kafka - 替换3.X二进制包(解压后覆盖原安装目录,或用新目录并修改系统服务配置)
- 替换预准备的3.X配置文件
- 启动Broker:
systemctl start kafka - 等待Broker加入集群,用
kafka-topics.sh --bootstrap-server <Broker地址>:9092 --list确认集群状态正常,ISR副本完整。
- 停止目标Broker:
- 所有Broker升级完成后,更新配置:
- 将
inter.broker.protocol.version修改为对应3.X版本的协议(如3.5版本为3.5-IV2) - 逐个重启Broker,确保集群协议平滑切换
- 再将
log.message.format.version修改为3.X版本,再次逐个重启Broker,完成ZK模式下的3.X升级。
- 将
第二步:滚动迁移到KRaft模式(移除ZK依赖)
这一步是核心,需严格按流程操作,避免元数据丢失:
- 生成KRaft集群ID:在任意Broker执行
kafka-storage.sh random-uuid,记录生成的UUID(如abc123)。 - 导出ZK元数据到KRaft格式:
kafka-metadata-shell.sh --zookeeper-connect <ZK集群地址> --command "export --cluster-id <生成的UUID> --output-dir /tmp/kraft-metadata" - 配置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
- 删除
- 初始化Broker存储:在每个Broker执行:
kafka-storage.sh format --cluster-id <生成的UUID> --config /etc/kafka/server.properties - 滚动切换Broker:
- 逐个停止ZK模式的Broker,用新的KRaft配置启动
- 启动后用
kafka-broker-api-versions.sh --bootstrap-server <Broker地址>:9092确认Broker正常加入KRaft集群 - 所有Broker切换完成后,确认集群状态稳定,再停止ZK集群。
关键注意事项
- 升级全程禁止执行主题创建、分区调整、副本重分配等操作。
- 必须先在测试环境完整复刻流程,验证无误后再操作生产集群。
- KRaft控制器节点至少需要3个,保证集群高可用,避免脑裂。
- 升级后持续监控集群的ISR状态、生产消费链路,确保数据无丢失。
内容的提问来源于stack exchange,提问作者Judy
相关产品推荐
相关产品推荐

