NoSuchMethodError beetween Apache Avro Schema and Connect AvroData.
hoon-e opened this issue · comments
jaehoon commented
environment details
- kafka 2.7.0
- kafka-hdfs-connector 10.x
- Apache Avro 1.7.4
- kafka-connect-avro-data 5.5.5
issue
I testing kafka hdfs connector without schema registry.
I added dependency jar with my custom avro schema and made new custom converter class that implements org.apache.kafka.connect.stroage.Converter
The code is like below.
I overrided methods, and error occurred on avroData.toConnectSchema method.
public class CustomAvroConverter implements Converter {
private Schema connectSchema = null;
private org.apache.avro.Schema avroSchema = null;
private AvroData avroData = null;
@Override
public void configure(Map<String, ?> configs, boolean b) {
avroData = new AvroData(50);
try {
// add custom avro schema
avroSchema = ReflectData.get().getSchema(CustomAvro.class);
// convert avroSchema to connectSchema
connectSchema = avroData.toConnectSchema(avroSchema);
}...
}
@Override
public byte[] fromConnectData...
@Override
public SchemaAndValue toConnectData...
}
Here is the error message.
[2021-07-01 15:52:35,006] ERROR Failed to start task hdfs-sinkconnect-test-2 (org.apache.kafka.connect.runtime.Worker:560)
java.lang.NoSuchMethodError: org.apache.avro.Schema$Field.defaultVal()Ljava/lang/Object;
at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1719)
at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1568)
at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1544)
at com.test.sink.converter.CustomAvroConverter.configure(CustomAvroConverter.java:47)
at org.apache.kafka.connect.runtime.isolation.Plugins.newConverter(Plugins.java:298)
at org.apache.kafka.connect.runtime.Worker.startTask(Worker.java:530)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder.startTask(DistributedHerder.java:1258)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder.access$1700(DistributedHerder.java:127)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$10.call(DistributedHerder.java:1273)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$10.call(DistributedHerder.java:1269)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
The code at line 1719 in the error message is as follows.
CONNECT_TYPES_TO_AVRO_TYPES.put(Type.BOOLEAN, org.apache.avro.Schema.Type.BOOLEAN);
Is there any datatype compatibility between Apache Avro and Kafka Connect Avro Data?
jaehoon commented
Error fixed with change Apache Avro version to 1.9.2.