java.lang.IncompatibleClassChangeError: class com.typesafe.scalalogging.BaseLogger can not implement com.typesafe.scalalogging.Logger

huangapple 未分类评论48阅读模式
英文:

java.lang.IncompatibleClassChangeError: class com.typesafe.scalalogging.BaseLogger can not implement com.typesafe.scalalogging.Logger

问题

> 错误: java.lang.IncompatibleClassChangeError: 类 com.typesafe.scalalogging.BaseLogger 无法实现 com.typesafe.scalalogging.Logger**

我正在配置 sink-influxDB。我遇到了上面的错误。
我正在使用 kafka-connect-influxdb-1.2.0.jar。其他支持的 jar 包括

kcql-2.4.0.jar
influxdb-java-2.15.jar
scala-logging_2.11-3.9.0.jar
scala-logging-slf4j_2.11-2.1.2.jar
scala-logging-api_2.11-2.1.2.jar

scala-logging-api_2.11-2.1.2.jar 中的 com.typesafe.scalalogging.BaseLogger 实现了 com.typesafe.scalalogging.Logger

以下是异常堆栈

ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectStandalone:130)
java.lang.IncompatibleClassChangeError: 类 com.typesafe.scalalogging.BaseLogger 无法实现 com.typesafe.scalalogging.Logger,因为它不是一个接口(com.typesafe.scalalogging.Logger 在 'app' 的未命名模块中的加载器中)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3137)
        at java.base/java.lang.Class.getConstructor0(Class.java:3342)
        at java.base/java.lang.Class.newInstance(Class.java:556)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:380)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:350)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:330)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:263)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:211)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:204)
        at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:60)
        at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:79)

我已将 kafka 连接 jar 包替换为 kafka-connect-influxdb-2.0.0-2.4.0-all.jar,并修改了 worker 属性以支持 String 类型的键和 AVRO 类型的值,如下所示

key.converter=org.apache.kafka.connect.storage.StringConverter
key.converter.schemas.enable=false

value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
value.converter.schemas.enable=true

在启动连接器时,抛出以下错误

INFO [Consumer clientId=connector-consumer-influxdb-sink-0, groupId=connect-influxdb-sink] Resetting offset for partition TEST-0 to offset 11. (org.apache.kafka.clients.consumer.internals.SubscriptionState:385)
[2020-05-06 04:09:11,490] ERROR WorkerSinkTask{id=influxdb-sink-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted. (org.apache.kafka.connect.runtime.WorkerSinkTask:559)
java.lang.IncompatibleClassChangeError: Class com.landoop.json.sql.JacksonJson$$anon$1 does not implement the requested interface com.fasterxml.jackson.module.scala.ScalaObjectMapper
	at com.fasterxml.jackson.module.scala.ScalaObjectMapper.$init$(ScalaObjectMapper.scala:338)
	at com.landoop.json.sql.JacksonJson$$anon$1.<init>(JacksonJson.scala:25)
	at com.landoop.json.sql.JacksonJson$.<init>(JacksonJson.scala:25)
	at com.landoop.json.sql.JacksonJson$.<clinit>(JacksonJson.scala)
	at com.datamountaineer.streamreactor.connect.influx.converters.SinkRecordParser$.$anonfun$build$2(SinkRecordParser.scala:59)
	at scala.util.Try$.apply(Try.scala:213)
	at com.datamountaineer.streamreactor.connect.influx.converters.SinkRecordParser$.build(SinkRecordParser.scala:59)
	at com.datamountaineer.streamreactor.connect.influx.writers.InfluxBatchPointsBuilder.$anonfun$build$1(InfluxBatchPointsBuilder.scala:90)
英文:

> Error: java.lang.IncompatibleClassChangeError: class com.typesafe.scalalogging.BaseLogger can not implement com.typesafe.scalalogging.Logger**

I am configuring sink-influxDB. I was getting the error above.
I'm using kafka-connect-influxdb-1.2.0.jar. The other supported jars are

kcql-2.4.0.jar
influxdb-java-2.15.jar
scala-logging_2.11-3.9.0.jar
scala-logging-slf4j_2.11-2.1.2.jar
scala-logging-api_2.11-2.1.2.jar

com.typesafe.scalalogging.BaseLogger from scala-logging-api_2.11-2.1.2.jar implements com.typesafe.scalalogging.Logger

Here is the exception stack

ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectStandalone:130)
java.lang.IncompatibleClassChangeError: class com.typesafe.scalalogging.BaseLogger can not implement com.typesafe.scalalogging.Logger, because it is not an interface (com.typesafe.scalalogging.Logger is in unnamed module of loader 'app')
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3137)
        at java.base/java.lang.Class.getConstructor0(Class.java:3342)
        at java.base/java.lang.Class.newInstance(Class.java:556)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:380)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:350)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:330)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:263)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:211)
        at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:204)
        at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:60)
        at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:79)

I have replaced the kafka connect jar with kafka-connect-influxdb-2.0.0-2.4.0-all.jar and modified the worker properties to support a key of type String and value of type AVRO, as below

key.converter=org.apache.kafka.connect.storage.StringConverter
key.converter.schemas.enable=false

value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
value.converter.schemas.enable=true

While starting the connector, the error below is thrown

INFO [Consumer clientId=connector-consumer-influxdb-sink-0, groupId=connect-influxdb-sink] Resetting offset for partition TEST-0 to offset 11. (org.apache.kafka.clients.consumer.internals.SubscriptionState:385)
[2020-05-06 04:09:11,490] ERROR WorkerSinkTask{id=influxdb-sink-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted. (org.apache.kafka.connect.runtime.WorkerSinkTask:559)
java.lang.IncompatibleClassChangeError: Class com.landoop.json.sql.JacksonJson$$anon$1 does not implement the requested interface com.fasterxml.jackson.module.scala.ScalaObjectMapper
	at com.fasterxml.jackson.module.scala.ScalaObjectMapper.$init$(ScalaObjectMapper.scala:338)
	at com.landoop.json.sql.JacksonJson$$anon$1.<init>(JacksonJson.scala:25)
	at com.landoop.json.sql.JacksonJson$.<init>(JacksonJson.scala:25)
	at com.landoop.json.sql.JacksonJson$.<clinit>(JacksonJson.scala)
	at com.datamountaineer.streamreactor.connect.influx.converters.SinkRecordParser$.$anonfun$build$2(SinkRecordParser.scala:59)
	at scala.util.Try$.apply(Try.scala:213)
	at com.datamountaineer.streamreactor.connect.influx.converters.SinkRecordParser$.build(SinkRecordParser.scala:59)
	at com.datamountaineer.streamreactor.connect.influx.writers.InfluxBatchPointsBuilder.$anonfun$build$1(InfluxBatchPointsBuilder.scala:90)

答案1

得分: 0

尝试使用:

import com.typesafe.scalalogging.LazyLogging

而不是:

import com.typesafe.scalalogging.slf4j.LazyLogging

这应该可以解决您下面的错误:

class com.typesafe.scalalogging.BaseLogger 无法实现 com.typesafe.scalalogging.Logger因为它不是一个接口
英文:

Try:

import com.typesafe.scalalogging.LazyLogging

instead of:

import com.typesafe.scalalogging.slf4j.LazyLogging

This should fix your below error:

class com.typesafe.scalalogging.BaseLogger can not implement com.typesafe.scalalogging.Logger, because it is not an interface

huangapple
  • 本文由 发表于 2020年5月5日 21:59:56
  • 转载请务必保留本文链接:https://java.coder-hub.com/61614931.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定