如何升级Kafka 2.6.0中的slf4j-log4j12-1.7.25.jar与log4j-1.2.17.jar
升级Kafka 2.6.0中slf4j-log4j12与log4j Jar包的方案
由于你无法升级Kafka和ZooKeeper集群,只能通过替换单独的依赖Jar包完成升级,以下是具体步骤和注意事项:
1. 确认版本兼容性
- slf4j-log4j12需与Kafka 2.6.0依赖的slf4j-api版本匹配:Kafka 2.6.0自带的slf4j-api是1.7.30,因此你可以升级slf4j-log4j12到1.7.x系列的最新稳定版(如1.7.36),该系列与1.7.30的slf4j-api完全兼容。
- 针对log4j-1.2.17:官方已停止维护,但存在带安全补丁的修复版本(如
log4j-1.2.17-cve-2021-4104.jar,修复了已知安全漏洞),优先选择这类版本而非单纯升级版本号。
2. 替换Jar包操作步骤
- 停止Kafka服务:在每个节点执行停止命令,确保服务完全关闭:
bin/kafka-server-stop.sh - 备份旧Jar包:进入Kafka安装目录的
libs文件夹,备份目标Jar:cd /path/to/kafka/libs mkdir -p ../jar_backups cp slf4j-log4j12-1.7.25.jar log4j-1.2.17.jar ../jar_backups/ - 删除旧Jar包:从
libs中移除旧文件:rm slf4j-log4j12-1.7.25.jar log4j-1.2.17.jar - 添加新Jar包:将下载好的新版本Jar(如
slf4j-log4j12-1.7.36.jar和安全补丁版log4j)复制到libs文件夹。 - 同步ZooKeeper操作:如果ZooKeeper节点也使用了相同的日志Jar包,需对ZooKeeper的
lib目录执行同样的备份、替换步骤,避免版本不一致引发问题。
3. 验证升级效果
- 单节点测试启动:先启动一个Kafka节点,检查日志是否正常:
确认日志中无类找不到、初始化失败等报错,再启动其他节点。bin/kafka-server-start.sh -daemon config/server.properties tail -f logs/server.log - 功能验证:运行简单的生产消费测试,确保服务功能不受影响:
确认消息能正常生产消费,日志无异常。# 创建测试主题 bin/kafka-topics.sh --create --topic test-upgrade --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 # 启动生产者发送消息 bin/kafka-console-producer.sh --topic test-upgrade --bootstrap-server localhost:9092 # 新开终端启动消费者接收消息 bin/kafka-console-consumer.sh --topic test-upgrade --bootstrap-server localhost:9092 --from-beginning
4. 关键注意事项
- 无需修改
log4j.properties配置:同系列版本(如slf4j 1.7.x、log4j 1.2.x)的配置文件完全兼容,无需调整。 - 检查依赖冲突:使用
jar -tf命令查看新Jar的类路径,确保与Kafka其他依赖无冲突,例如:jar -tf slf4j-log4j12-1.7.36.jar | grep "org/slf4j"
内容的提问来源于stack exchange,提问作者Emrahall
相关产品推荐
相关产品推荐

