Aiven-Open/gcs-connector-for-apache-kafka

java.lang.ClassNotFoundException: com.google.auth.Credentials

Closed this issue · 5 comments

Hi, was trying out this connector but bump into error below, appreciate if you can shed some lights on this error java.lang.NoClassDefFoundError: com/google/auth/Credentials

logs as followed:

debezium_1         | 2020-04-17 06:27:24,699 ERROR  ||  Failed to start task auction-gcs-sink-0   [org.apache.kafka.connect.runtime.Worker]                                        
debezium_1         | java.lang.NoClassDefFoundError: com/google/auth/Credentials                                                                                                   
debezium_1         |    at java.base/java.lang.Class.forName0(Native Method)                                                                                                       
debezium_1         |    at java.base/java.lang.Class.forName(Class.java:398)                                                                                                       
debezium_1         |    at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:719)                                                                                  
debezium_1         |    at org.apache.kafka.common.config.ConfigDef.parseValue(ConfigDef.java:474)                                                                                 
debezium_1         |    at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:467)                                                                                      
debezium_1         |    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:108)                                                                           
debezium_1         |    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:142)                                                                           
debezium_1         |    at org.apache.kafka.connect.runtime.TaskConfig.<init>(TaskConfig.java:51)                                                                                  
debezium_1         |    at org.apache.kafka.connect.runtime.Worker.startTask(Worker.java:431)                                                                                      
debezium_1         |    at org.apache.kafka.connect.runtime.distributed.DistributedHerder.startTask(DistributedHerder.java:1140)                                                   
debezium_1         |    at org.apache.kafka.connect.runtime.distributed.DistributedHerder.access$1700(DistributedHerder.java:125)                                                  
debezium_1         |    at org.apache.kafka.connect.runtime.distributed.DistributedHerder$13.call(DistributedHerder.java:1155)                                                     
debezium_1         |    at org.apache.kafka.connect.runtime.distributed.DistributedHerder$13.call(DistributedHerder.java:1151)                                                     
debezium_1         |    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)                                                                                      
debezium_1         |    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)                                                               
debezium_1         |    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)                                                               
debezium_1         |    at java.base/java.lang.Thread.run(Thread.java:834)                                                                                                         
debezium_1         | Caused by: java.lang.ClassNotFoundException: com.google.auth.Credentials                                                                                      
debezium_1         |    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)                                                                                    
debezium_1         |    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)                                                                                         
debezium_1         |    at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:104)                                                      
debezium_1         |    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)                                                                                         
debezium_1         |    ... 17 more

my config as followed:

{
"name": "auction-gcs-sink",
  "config": {
    "connector.class": "io.aiven.kafka.connect.gcs.GcsSinkConnector",
    "tasks.max": "1",
    "key.converter": "org.apache.kafka.connect.converters.ByteArrayConverter",
    "value.converter": "org.apache.kafka.connect.converters.ByteArrayConverter",
    "topics": "some_topic",
    "gcs.credentials.path": "/path/to/google_credentials.json",
    "gcs.bucket.name": "some-bucket",
    "file.name.prefix": "some-prefix/",
    "file.compression.type": "gzip",
    "format.output.fields": "key,value,offset"
  }
}

Hi,

Could you please specify which release you're trying to use?

Hi, thanks for the reply
I am using the latest release v0.3.0

I noticed that there are no build attached to the release. (We'll fix this shortly!) This mean you must have built the connector by yourself. Could you please try running ./gradlew clean distTar and using the whole content of build/distributions/aiven-kafka-connect-gcs-0.3.0.tar in your Kafka Connect? It should contain all the necessary classes.

Yup, I have built it with Gradle. Sorry for asking the obvious as I'm not a Java developer.

Thanks a lot for your replying, after copying all .jars in the .tar into Kafka Connect it seems the dependencies are resolved. Unfortunately, I am having this problem:

Failed to create GCS credentials: Failed to read GCS credentials from google_credentials.json

I have tried relative and full path to the credential file but having the same error. I am running Kafka and Kafka Connect locally. The conf as followed:

"gcs.credentials.path": "/path/to/google_credentials.json",

This should be something obvious and dumb and I missed it

ok found the issue, the credentials files need to be inside the container, thanks for your help. Have a nice day