在 Linux 上升级 Apache Kafka 需要谨慎操作,尤其是生产环境。下面我按通用、稳妥、可回滚的思路,给你一个完整升级流程,适用于 Kafka 2.x → 3.x 或 小版本升级。
kafka-topics.sh --version
# 或
./bin/kafka-server-start.sh --version
不同版本差异较大,务必查看:
https://kafka.apache.org/documentation.html#upgrade
# Kafka 数据目录
cp -r /data/kafka-logs /data/kafka-logs-bak
# 配置文件
cp -r /opt/kafka/config /opt/kafka/config-bak
# 是否使用 ZooKeeper
grep "zookeeper.connect" config/server.properties
Kafka 3.x 开始支持 KRaft(无 ZooKeeper),升级方式不同
| 场景 | 推荐方式 |
|---|---|
| 小版本(2.8 → 2.8.2) | 滚动升级 ✅ |
| 大版本(2.x → 3.x) | 滚动升级 ✅ |
| ZooKeeper → KRaft | 迁移升级 ⚠️ |
| 单机测试 | 停机升级 |
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -zxvf kafka_2.13-3.6.1.tgz
cp /opt/kafka/config/server.properties /opt/kafka-new/config/
cp /opt/kafka/config/producer.properties /opt/kafka-new/config/
cp /opt/kafka/config/consumer.properties /opt/kafka-new/config/
⚠️ 不要直接覆盖,先对比差异
/opt/kafka/bin/kafka-server-stop.sh
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
/opt/kafka-new/bin/kafka-server-start.sh -daemon /opt/kafka-new/config/server.properties
jps | grep Kafka
/opt/kafka-new/bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092
所有 Broker 升级完成后,再升级协议版本
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --describe
inter.broker.protocol.versionkafka-configs.sh --bootstrap-server localhost:9092 \
--entity-type brokers --entity-default \
--alter --add-config inter.broker.protocol.version=3.6
log.message.format.version(老版本需要)Kafka 3.x 后通常不需要
⚠️ 不推荐直接原地升级
如果升级失败:
# 停止新版本
/opt/kafka-new/bin/kafka-server-stop.sh
# 启动旧版本
/opt/kafka/bin/kafka-server-start.sh -daemon config/server.properties
只要 数据目录没变,Kafka 可回滚
FATALUnsupportedVersionException
✅ 解决:先升级客户端,再升级服务端
chown -R kafka:kafka /data/kafka-logs
1. 客户端(Producer / Consumer)
2. Broker(逐个)
3. 协议版本
4. ZooKeeper(最后)
如果你愿意,可以告诉我:
我可以给你 精确到命令级别的升级方案 ✅