在 Debian 上升级 Apache Kafka,通常不是通过 apt,而是手动替换 Kafka 目录。下面给你一套稳妥、生产可用的升级流程,适用于大多数场景(包括从 2.x → 3.x)。
kafka-server-start.sh --version
# 或
/path/to/kafka/bin/kafka-topics.sh --version
常见路径:
/opt/kafka
/usr/local/kafka
# 是否使用 ZooKeeper
grep "zookeeper.connect" server.properties
Kafka 3.x 开始支持 KRaft(无 ZooKeeper),升级方式不同
| 当前版本 | 升级方式 |
|---|---|
| 2.x → 3.x | 滚动升级(推荐) |
| 3.x → 3.y | 滚动升级 |
| ZooKeeper → KRaft | 不可直接升级,需迁移 |
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
Scala 版本建议与旧版本一致(如 2.13)
tar -xzf kafka_2.13-3.6.1.tgz -C /opt
目录结构:
/opt/kafka_2.13-3.6.1
cp /opt/kafka/server.properties /opt/kafka_2.13-3.6.1/config/
cp /opt/kafka/zookeeper.properties /opt/kafka_2.13-3.6.1/config/
⚠️ 不要直接覆盖整个 config 目录
systemctl stop kafka
# 或
/opt/kafka/bin/kafka-server-stop.sh
ln -sfn /opt/kafka_2.13-3.6.1 /opt/kafka
systemctl start kafka
✅ 观察日志:
tail -f /opt/kafka/logs/server.log
/opt/kafka/bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--entity-type brokers \
--entity-default \
--alter \
--add-config inter.broker.protocol.version=3.6
systemctl stop kafka
mv /opt/kafka /opt/kafka_old
tar -xzf kafka_*.tgz -C /opt
cp kafka_old/config/server.properties /opt/kafka/config/
systemctl start kafka
⚠️ 不能从 ZooKeeper 直接升级
# 停止 controller + broker
# 替换 Kafka 目录
# 使用相同 cluster.id
查看 cluster.id:
cat /opt/kafka/meta.properties
[Unit]
Description=Apache Kafka
After=network.target
[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
| 错误 | 原因 |
|---|---|
| UnsupportedVersionException | protocol 版本未升级 |
| broker 无法加入集群 | config 不一致 |
| topic 丢失 | 数据目录未保留 |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的升级方案。