下面给你一份在 Linux 上升级 Apache Kafka 的常规做法,适用于二进制包(tar.gz)部署场景(最常见)。如果你是用 RPM / DEB / Docker / Kubernetes,方式会不同,可以再告诉我。
kafka/bin/kafka-topics.sh --version
# 或
cat kafka/version.txt
Kafka 升级不能跳大版本乱升,必须看对应版本的 Upgrade Guide: https://kafka.apache.org/documentation/#upgrade
例如:
⚠️ 特别注意:
假设你是 多 Broker 集群
cp -r kafka/config kafka_config_backup
cp -r kafka/logs kafka_logs_backup
如果是生产环境,建议先做一次 全量备份。
wget https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz -C /opt
cp kafka/config/server.properties new_kafka/config/
cp kafka/config/producer.properties new_kafka/config/
cp kafka/config/consumer.properties new_kafka/config/
⚠️ 不要直接覆盖,先对比差异:
diff kafka/config/server.properties new_kafka/config/server.properties
在 server.properties 中确认:
inter.broker.protocol.version=CURRENT_VERSION
log.message.format.version=CURRENT_VERSION
例如从 3.0 → 3.7:
inter.broker.protocol.version=3.0
先不要改成新版本
kafka/bin/kafka-server-stop.sh
# 或
kill -TERM <broker_pid>
new_kafka/bin/kafka-server-start.sh -daemon new_kafka/config/server.properties
✅ 等该 Broker 完全恢复(in-sync)
✅ 再升级下一个
确认没问题后,修改:
inter.broker.protocol.version=3.7
log.message.format.version=3.7
再滚动重启一次。
kafka-server-stop.sh
# 替换目录
mv kafka kafka_old
mv kafka_new kafka
kafka/bin/kafka-server-start.sh -daemon kafka/config/server.properties
kafka/bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092
kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
观察日志:
tail -f kafka/logs/server.log
❌ 直接覆盖 config
❌ 跨多个大版本升级
❌ 没备份直接干
❌ 没等 ISR 恢复就重启下一个节点
你可以告诉我:
我可以直接给你精确升级命令。