温馨提示×

Linux Kafka如何升级

小樊
47
2026-08-01 15:13:54
栏目: 智能运维

在 Linux 上升级 Apache Kafka 需要谨慎操作,尤其是生产环境。下面我按通用、稳妥、可回滚的思路,给你一个完整升级流程,适用于 Kafka 2.x → 3.x小版本升级


一、升级前准备(非常重要)

1️⃣ 确认当前版本

kafka-topics.sh --version
# 或
./bin/kafka-server-start.sh --version

2️⃣ 查看官方升级说明(必看)

不同版本差异较大,务必查看:

https://kafka.apache.org/documentation.html#upgrade

3️⃣ 备份关键数据

# Kafka 数据目录
cp -r /data/kafka-logs /data/kafka-logs-bak

# 配置文件
cp -r /opt/kafka/config /opt/kafka/config-bak

4️⃣ 确认 ZooKeeper / KRaft 模式

# 是否使用 ZooKeeper
grep "zookeeper.connect" config/server.properties

Kafka 3.x 开始支持 KRaft(无 ZooKeeper),升级方式不同


二、升级方式选择

场景 推荐方式
小版本(2.8 → 2.8.2) 滚动升级 ✅
大版本(2.x → 3.x) 滚动升级 ✅
ZooKeeper → KRaft 迁移升级 ⚠️
单机测试 停机升级

三、滚动升级(推荐生产环境)

✅ 适用场景

  • 多 Broker
  • 不能停机

Step 1:逐个升级 Broker

1️⃣ 下载新版本 Kafka

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

2️⃣ 复制配置文件

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/

⚠️ 不要直接覆盖,先对比差异


Step 2:逐个重启 Broker(关键点)

✅ 关闭一个 Broker

/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

Step 3:观察集群状态

/opt/kafka-new/bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092

所有 Broker 升级完成后,再升级协议版本


四、升级 Kafka 协议版本(关键)

1️⃣ 查看当前版本

kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --describe

2️⃣ 升级 inter.broker.protocol.version

kafka-configs.sh --bootstrap-server localhost:9092 \
--entity-type brokers --entity-default \
--alter --add-config inter.broker.protocol.version=3.6

3️⃣ 升级 log.message.format.version(老版本需要)

Kafka 3.x 后通常不需要


五、ZooKeeper → KRaft 升级(特殊)

⚠️ 不推荐直接原地升级

推荐方案

  1. 新部署 KRaft 集群
  2. 使用 MirrorMaker 2
  3. 逐步迁移流量

六、回滚方案(必须准备)

如果升级失败:

# 停止新版本
/opt/kafka-new/bin/kafka-server-stop.sh

# 启动旧版本
/opt/kafka/bin/kafka-server-start.sh -daemon config/server.properties

只要 数据目录没变,Kafka 可回滚


七、升级后检查清单 ✅

  • [ ] Broker 全部在线
  • [ ] 分区副本正常
  • [ ] 生产者 / 消费者无报错
  • [ ] 日志无 FATAL
  • [ ] 协议版本已升级

八、常见错误

❌ 版本不兼容

UnsupportedVersionException

✅ 解决:先升级客户端,再升级服务端

❌ 数据目录权限问题

chown -R kafka:kafka /data/kafka-logs

九、建议升级顺序

1. 客户端(Producer / Consumer)
2. Broker(逐个)
3. 协议版本
4. ZooKeeper(最后)

如果你愿意,可以告诉我:

  • Kafka 当前版本
  • 是否使用 ZooKeeper
  • 单节点还是集群
  • 是否生产环境

我可以给你 精确到命令级别的升级方案

0