在 Ubuntu 上升级 Kafka 主要有两种方式:使用包管理器(如 apt) 和 手动下载二进制包。由于 Kafka 依赖 Zookeeper(或 KRaft 模式下的内部元数据管理),升级时需要特别注意兼容性。
以下是详细的升级步骤和注意事项。
如果你最初是通过 Confluent 的仓库或者社区仓库安装的,可以直接使用 apt。
更新包列表
sudo apt update
升级 Kafka 包
通常包名可能是 kafka 或者 confluent-kafka。
# 如果是 Apache Kafka
sudo apt upgrade kafka
# 如果是 Confluent Platform
sudo apt upgrade confluent-kafka
重启服务
sudo systemctl restart kafka
这是最常见的情况。假设你原来的 Kafka 在 /opt/kafka,现在要升级到新版本。
cd /opt/kafka
./bin/kafka-topics.sh --version
# 备份配置文件
cp -r /opt/kafka/config /opt/kafka/config.backup
# 备份数据目录(如果数据在 kafka 目录下)
cp -r /opt/kafka/logs /opt/kafka/logs.backup
访问 Apache Kafka 官方下载页 获取最新版本的链接。
# 假设下载 3.6.0 版本
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
sudo mv kafka_2.13-3.6.0 /opt/kafka-new
不要直接覆盖整个文件夹,因为新版本的 libs 和 bin 是不同的。只需要复制你的自定义配置。
# 复制 server.properties, zookeeper.properties 等
sudo cp /opt/kafka/config/server.properties /opt/kafka-new/config/
sudo cp /opt/kafka/config/zookeeper.properties /opt/kafka-new/config/ # 如果用 zk
# 如果你修改了其他文件(如 log4j.properties),也一并复制
Kafka 的数据通常存储在 log.dirs 指定的路径(默认通常是 /tmp/kafka-logs 或 /var/lib/kafka-logs)。
server.properties 中配置了 log.dirs=/var/lib/kafka-logs,那么你不需要移动数据。新版本的 Kafka 会直接读取旧数据。server.properties 指向旧目录。# 停止旧版本
sudo systemctl stop kafka # 或者手动 kill -9 <pid>
# 切换目录(可选,或者修改 systemd 文件指向新路径)
sudo rm /opt/kafka
sudo ln -s /opt/kafka-new /opt/kafka
# 启动新版本
sudo systemctl start kafka
如果是集群环境,不要同时重启所有节点。
InSync 再进行下一个节点。如果你是从一个非常老的版本(如 2.0 升级到 3.x),升级后可能需要修改 server.properties 中的协议版本,以启用新特性。
inter.broker.protocol.version。新版本的 Kafka 可能需要更高版本的 Java(例如 Kafka 3.x 通常需要 Java 11 或 17)。请检查官方文档的 “System Requirements”。
config/ 和 log.dirs 数据。server.properties 到新目录。logs/server.log 确认无报错。