Kafka 4.1.0 升级笔记:controller quorum 改成动态配置要走哪几步
发布说明见 kafka.apache.org/blog,升级文档见 kafka.apache.org/41/getting-started/upgrade。下面按升级时要动的部分整理。
1. 动态 controller quorum(KIP-853,kraft.version=1)
4.1 支持从静态 controller 配置升级到动态 controller 配置,可以在不整停 quorum 的前提下增删 controller。
先看当前特性版本:
bin/kafka-features.sh --bootstrap-server localhost:9092 describe
检查输出里的 FinalizedVersionLevel。如果 kraft.version 为 0,需要升到至少 1:
bin/kafka-features.sh --bootstrap-server localhost:9092 upgrade --release-version 4.1
也可以只升 KRaft 特性版本:
bin/kafka-features.sh --bootstrap-server localhost:9092 upgrade --feature kraft.version=1
KRaft version 1 弃用了 controller.quorum.voters,新增 controller.quorum.bootstrap.servers。升级确认后,在各节点移除 controller.quorum.voters,加入 controller.quorum.bootstrap.servers。后者作用类似客户端的 bootstrap.servers,不必列全部 controller,但应尽量多列。
静态还是动态由格式化时决定:格式化时没有 controller.quorum.voters,且带 --standalone、--initial-controllers 或 --no-initial-controllers 之一,就是动态 quorum。
2. KIP-1092:Consumer#close 增加 CloseOptions
Consumer#close 新增 CloseOptions,可以指定关闭消费者时是否显式离开 group。Consumer.close(Duration) 已废弃。这给了 Streams 控制何时触发 group rebalance 的能力。
3. KIP-1101:rack 拓扑变化触发 rebalance
rack 拓扑变化会触发 rebalance。rack-aware 分区分配逻辑做了重写,内存效率更高,单消费者组可以支持数百成员。
4. KIP-1109:统一 consumer topic 指标
原先 metric 名里会把 topic 名中的点替换成下划线,现在同时以未改名的 topic 名发出指标。用户应迁移到新指标,改名版本会在 5.0 移除。
5. KIP-1118:producer 网络线程死锁保护
从 4.1 起,如果在 KafkaProducer.send() 的回调里调用 KafkaProducer.flush(),会直接抛异常。此前这种写法可能导致死锁。
6. KIP-1139:OAuth 支持 jwt-bearer
OAuth 新增 jwt-bearer grant type,避免把明文 secret 写进配置,很多 OAuth provider 都支持。
7. KIP-1152:ListTransactions 支持过滤
ListTransactions API 增加 transactional ID 模式过滤,不必先列出所有事务再在客户端筛。
8. KIP-891:Connect 插件多版本共存
Connect 支持同一 connector 插件的多版本安装与运行,覆盖 Connectors、Converters、Transformations、Predicates。升级和回滚不再需要另起一个 Connect 集群。
9. KIP-932 / KIP-1071:仍是 preview
Queues for Kafka(share groups)还是 preview,未生产就绪,可以评估测试;使用时需要通过 kafka-features.sh 升到 share.version=1。KIP-1071 的 Streams Rebalance Protocol 为 early access。
升级前确认模式
Kafka 4.0 起只支持 KRaft 模式,ZooKeeper 已移除。从 ZooKeeper 迁到 KRaft 的最后一个 bridge release 是 3.9。