解决kafka connect 启动报错 java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()

本文详细解析了Kafka Connect启动时遇到的java.lang.NoSuchMethodError错误,主要原因是CLASSPATH中Guava版本过低。文章提供了两种解决方案:一是逐个替换Hadoop classpath中的低版本Guava;二是通过unset CLASSPATH彻底避免版本冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错
./bin/connect-distributed.sh ./config/connect-distributed.properties 
1
./bin/connect-standalone.sh ./bin/connect-standalone.sh  ./config/connect-file-source.properties  ./config/connect-file-sink.properties
1
[2018-11-23 12:40:21,101] ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed:117)
java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
        at org.reflections.Reflections.expandSuperTypes(Reflections.java:380)
        at org.reflections.Reflections.<init>(Reflections.java:126)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader$InternalReflections.<init>(DelegatingClassLoader.java:410)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:310)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:244)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:192)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:185)
        at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:61)
        at org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:74)

解决
根本原因是CLASSPATH中首先找到的guava版本比较低。

直接原因是本机上之前配过了hadoop 环境,首先找到的是hadoop classpath 中包含有比较低版本的guava jar包,从而找到的不是kafka libs下自带的guava,如果手动一个一个地去把hadoop classpath中的guava去掉 或者换成高版本的(guava-20.0.jar以上),然后还会报java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties() 等错误,也是一样的原因,hadoop classpath中相关的包版本过低,还得一个有一个去解决。

一步到位的方法是,unset CLASSPATH , 注意这样做之后,如果要搭建其他组件的时候 CLASSPATH 记得需要再配一下。
 

### Kafka 启动时出现 `java.lang.NoClassDefFoundError: org/apache/kafka/server/config/ZkConfigs` 的解决方案 #### 问题分析 `java.lang.NoClassDefFoundError` 表示在运行时,JVM 尝试加载某个类时未能找到该类。此错误通常由以下原因引起: - **依赖缺失**:项目中缺少包含目标类的 jar 包。 - **版本冲突**:多个版本的 jar 包同时存在,导致加载了不正确的版本。 - **类路径配置错误**:所需的 jar 包未正确添加到类路径中。 在当前问题中,`org/apache/kafka/server/config/ZkConfigs` 类位于 Kafka 的服务器端相关依赖中[^1]。如果启动 Kafka 时抛出此类异常,可能是因为 `kafka-server-common` 或其他相关依赖未正确引入或版本不匹配。 --- #### 解决方案 ##### 1. 检查 Maven 依赖 确保项目的 `pom.xml` 文件中包含了正确的 Kafka 依赖。以下是推荐的依赖配置: ```xml <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.12</artifactId> <version>3.0.0</version> <!-- 根据实际需求选择版本 --> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.0</version> <!-- 确保与 kafka_2.12 版本一致 --> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-server-common</artifactId> <version>3.0.0</version> <!-- 确保包含 ZkConfigs 类 --> </dependency> ``` 注意:所有 Kafka 相关依赖的版本应保持一致,避免版本冲突[^2]。 --- ##### 2. 检查依赖冲突 使用以下命令检查 Maven 依赖树,确认是否存在冲突的 Kafka 版本: ```bash mvn dependency:tree ``` 如果发现多个版本的 Kafka 依赖,请通过 `<exclusions>` 排除冲突的依赖。例如: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.8.8</version> <exclusions> <exclusion> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.12</artifactId> </exclusion> </exclusions> </dependency> ``` 然后重新引入正确的 Kafka 依赖版本[^4]。 --- ##### 3. 确保类路径正确 如果 Kafka 是通过脚本启动的(如 `bin/kafka-server-start.sh`),请确保启动脚本中的 `CLASSPATH` 配置正确。例如: ```bash export CLASSPATH=/path/to/your/kafka/libs/* ``` 确保 `libs` 目录下包含所有必要的 Kafka jar 包,包括 `kafka-server-common.jar`[^5]。 --- ##### 4. 升级 Kafka 版本 如果当前使用的 Kafka 版本较旧,建议升级到最新稳定版本(如 3.x 系列)。新版本通常修复了旧版本中的已知问题,并提供了更好的兼容性。 --- ##### 5. 检查 ZooKeeper 配置 `ZkConfigs` 类与 ZooKeeper 配置密切相关。如果 Kafka 使用了外部 ZooKeeper,请确保 ZooKeeper 正常运行,并且 Kafka 的 `server.properties` 文件中正确配置了 ZooKeeper 地址。例如: ```properties zookeeper.connect=localhost:2181 ``` 如果 ZooKeeper 配置错误,可能会导致 Kafka 在初始化时无法加载必要的类。 --- ### 示例代码:Maven 依赖配置 以下是一个完整的 Maven 依赖配置示例: ```xml <dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.12</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-server-common</artifactId> <version>3.0.0</version> </dependency> </dependencies> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值