confluentinc / kafka-connect-hdfs

Kafka Connect HDFS connector

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NoSuchMethodError beetween Apache Avro Schema and Connect AvroData.

hoon-e opened this issue · comments

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?

Error fixed with change Apache Avro version to 1.9.2.