在 Ubuntu 上升级 Kafka(通常指 Apache Kafka,而不是 confluent 版本),一般不建议直接覆盖安装,而是按“保留数据 + 平滑升级”的方式来做。下面给你一套通用且安全的升级步骤。
kafka-server-start.sh --version
# 或
ls /opt/kafka # 看目录命名
# 配置
cp -r /opt/kafka/config ~/kafka-config-backup
# 数据(如果是单节点或测试)
cp -r /opt/kafka/logs ~/kafka-logs-backup
生产环境务必确认:
server.properties 中 log.dirsKafka 只能逐个大版本升级,例如:
0.10 → 0.11 → 1.0 → 2.0 → 3.x
⚠️ 不能跨大版本直接跳(如 0.10 → 3.x)
官方升级文档:
https://kafka.apache.org/documentation/#upgrade
以 3.6.1 为例:
cd /opt
sudo wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
sudo tar -xzf kafka_2.13-3.6.1.tgz
cp -r /opt/kafka_2.13-3.6.1 /opt/kafka-new
cp /opt/kafka/config/server.properties /opt/kafka-new/config/
cp /opt/kafka/config/zookeeper.properties /opt/kafka-new/config/
对比新旧配置差异:
diff /opt/kafka/config/server.properties /opt/kafka-new/config/server.properties
# 如果是 systemd
sudo systemctl stop kafka
# 或直接
jps
kill -TERM <kafka-pid>
⚠️ 不要用 kill -9
sudo mv /opt/kafka /opt/kafka-old
sudo mv /opt/kafka-new /opt/kafka
确认 log.dirs 仍指向原数据目录。
sudo systemctl start kafka
或手动:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
查看日志:
tail -f /opt/kafka/logs/server.log
在 server.properties 中:
inter.broker.protocol.version=CURRENT_VERSION
log.message.format.version=CURRENT_VERSION
升级完成后,观察一段时间再改为新版本。
建议客户端也同步升级,避免兼容问题。
如果你用 systemd,修改:
sudo vim /etc/systemd/system/kafka.service
确认:
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
然后:
sudo systemctl daemon-reload
| 问题 | 原因 |
|---|---|
| 启动失败 | 跨大版本 |
| 数据丢失 | log.dirs 指向错 |
| 消费者异常 | 协议版本未升级 |
| Zookeeper 不兼容 | ZK 版本过旧 |
如果你愿意,可以告诉我:
我可以给你精确到版本的升级方案。