You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kafka Connect部署Cassandra连接器遇NoSuchMethodError问题求助

解决Kafka Connect Cassandra连接器的NoSuchMethodError问题

这个问题我之前部署Kafka Connect连接器时也碰到过,本质是Guava版本冲突导致的:Kafka Connect运行时自带的Guava库,和kafka-connect-cassandra-all.jar中打包的Guava版本不兼容,com.google.common.collect.Sets$SetView.iterator()方法在不同版本的Guava里签名发生了变化,从而触发了NoSuchMethodError

下面是具体的解决步骤:

1. 先确认版本冲突细节

  • 查看Kafka自带的Guava版本:找到你的Kafka安装目录下的libs/guava-*.jar,记录版本号(比如guava-28.0-jre.jar)。
  • 查看Cassandra连接器依赖的Guava版本:执行命令jar tf kafka-connect-cassandra-1.0.0-1.0.0-all.jar | grep guava,或者解压该jar包,查看META-INF/maven/com.google.guava/guava/pom.xml里的版本信息。

2. 选择合适的冲突解决方式

方式一:清理连接器jar中的重复Guava依赖(推荐)

kafka-connect-cassandra的all.jar通常会打包所有依赖,包括Guava,这是冲突的根源。你可以:

  • 解压kafka-connect-cassandra-1.0.0-1.0.0-all.jar到临时目录
  • 删除目录中所有Guava相关的文件:包括guava-*.jar(如果存在),以及com/google/common下的所有类文件
  • 重新打包成jar包:用jar cvf kafka-connect-cassandra-cleaned.jar -C 临时目录/ .
  • 将清理后的jar包放到你配置的plugin.path指定的子目录中(比如plugins/cassandra/,不要直接放在plugin.path根目录)

Kafka Connect的类加载器会优先加载自身libs目录下的类,再加载每个插件子目录的类,这样连接器就会使用Kafka自带的Guava版本,避免冲突。

方式二:替换Kafka的Guava版本(谨慎操作)

如果Cassandra连接器依赖的Guava版本更高,且经过测试兼容Kafka Connect的话,可以:

  • 删除Kafka安装目录libs/下的旧Guava jar包
  • 将Cassandra连接器依赖的Guava jar包复制到Kafka的libs/目录中
  • 重启Kafka Connect服务

⚠️ 注意:这种方式可能影响Kafka其他组件的稳定性,一定要先在测试环境验证。

3. 验证修复效果

重启Kafka Connect后,查看日志是否还有NoSuchMethodError,然后尝试创建Cassandra连接器的任务,确认任务能正常启动并同步数据。

内容的提问来源于stack exchange,提问作者el323

火山引擎 最新活动