严格遵循Apache官网步骤安装启动Kafka却遭遇致命异常退出
Kafka启动失败排查:Scala方法找不到及SLF4J多绑定错误
问题场景
严格按照Apache官方步骤安装并启动Kafka,执行启动命令:
~/kafka$ bin/kafka-server-start.sh config/server.properties
出现如下错误日志:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/boitran/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/boitran/kafka/libs/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/boitran/kafka/libs/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] [2022-12-29 13:46:12,977] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$) [2022-12-29 13:46:13,359] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$) java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Ljava/lang/Object; at kafka.Kafka$.getPropsFromArgs(Kafka.scala:43) ~[kafka_2.13-3.3.1.jar:?] at kafka.Kafka$.main(Kafka.scala:86) [kafka_2.13-3.3.1.jar:?] at kafka.Kafka.main(Kafka.scala) [kafka_2.13-3.3.1.jar:?] Exception in thread "main" java.lang.NoSuchMethodError: scala.Option.orNull(Lscala/$less$colon$less;)Ljava/lang/Object; at kafka.utils.Exit$.exit(Exit.scala:28) at kafka.Kafka$.main(Kafka.scala:122) at kafka.Kafka.main(Kafka.scala)
核心原因及解决方案
1. Scala版本不兼容(致命错误)
从报错java.lang.NoSuchMethodError和kafka_2.13-3.3.1.jar可以看出:
- Kafka 3.3.1基于Scala 2.13编译,但系统中存在其他版本的Scala依赖(比如Hive的Scala版本与Kafka要求不一致),导致类加载时调用了错误版本的Scala方法。
解决步骤:
- 清空系统级Scala环境变量:修改
bin/kafka-server-start.sh,在启动命令前添加export SCALA_HOME=,避免Kafka加载系统中的Scala依赖。 - 检查
CLASSPATH变量:移除所有无关的Scala jar包路径,确保启动Kafka时仅加载自身libs目录下的依赖。 - 优先使用Kafka官方提供的完整二进制包,不要手动添加外部依赖,避免版本冲突。
2. SLF4J多绑定冲突(非致命但影响日志)
日志显示系统中同时存在Hive的log4j-slf4j-impl和Kafka自身的多个SLF4J绑定jar包,导致日志框架冲突。
解决步骤:
- 清理Kafka
libs目录下的冗余SLF4J绑定jar包:保留slf4j-reload4j-1.7.36.jar,删除slf4j-log4j12-1.7.25.jar。 - 确保启动Kafka时,Hive的lib目录不会被加入到类路径中(检查全局
CLASSPATH是否包含Hive路径,如有则临时移除)。
内容的提问来源于stack exchange,提问作者boitran
相关产品推荐
相关产品推荐

