apache / camel-kafka-connector-examples

Apache Camel Kafka Connector Examples
https://camel.apache.org
64 stars 43 forks source link

Failed to run the github-source-events example #327

Closed milkchocolate closed 2 years ago

milkchocolate commented 2 years ago

Hi team, I run into an issue when I run the github-source-events example, can you help me on this?

How I run the example

I think I strictly follow github/github-source-events/README.adoc, the only difference is I use Docker for local Kafka environment, the connect-standalone.sh script is executed inside the Kafka container.

The issue I run into

At the last step, when I run the commad, it throws an error. Command: {path}/connect-standalone.sh {path}/connect-standalone.properties {path}/CamelGithubSourceConnector.properties Error: Failed to find any class that implements Connector and which name matches org.apache.camel.kafkaconnector.github.CamelGithubSourceConnector

Files from untar.gz github-extended-0.11.0-package.tar.gz

image

connect-standalone.properties

image

CamelGithubSourceConnector.properties

image

Detailed Error

[2021-11-03 10:25:41,496] ERROR Failed to create job for /milkchocolate/kafka-connector-properties/CamelGithubSourceConnector.properties (org.apache.kafka.connect.cli.ConnectStandalone:107) [2021-11-03 10:25:41,497] ERROR Stopping after connector error (org.apache.kafka.connect.cli.ConnectStandalone:117) java.util.concurrent.ExecutionException: org.apache.kafka.connect.errors.ConnectException: Failed to find any class that implements Connector and which name matches org.apache.camel.kafkaconnector.github.CamelGithubSourceConnector, available connectors are: PluginDesc{klass=class org.apache.camel.kafkaconnector.CamelSinkConnector, name='org.apache.camel.kafkaconnector.CamelSinkConnector', version='0.11.0', encodedVersion=0.11.0, type=sink, typeName='sink', location='file:/milkchocolate/github-extended/target/github-extended/camel-kafka-connector-0.11.0.jar'}, PluginDesc{klass=class org.apache.camel.kafkaconnector.CamelSourceConnector, name='org.apache.camel.kafkaconnector.CamelSourceConnector', version='0.11.0', encodedVersion=0.11.0, type=source, typeName='source', location='file:/milkchocolate/github-extended/target/github-extended/camel-kafka-connector-0.11.0.jar'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorSourceConnector, name='org.apache.kafka.connect.mirror.MirrorSourceConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockConnector, name='org.apache.kafka.connect.tools.MockConnector', version='3.0.0', encodedVersion=3.0.0, type=connector, typeName='connector', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'} at org.apache.kafka.connect.util.ConvertingFutureCallback.result(ConvertingFutureCallback.java:115) at org.apache.kafka.connect.util.ConvertingFutureCallback.get(ConvertingFutureCallback.java:99) at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:114) Caused by: org.apache.kafka.connect.errors.ConnectException: Failed to find any class that implements Connector and which name matches org.apache.camel.kafkaconnector.github.CamelGithubSourceConnector, available connectors are: PluginDesc{klass=class org.apache.camel.kafkaconnector.CamelSinkConnector, name='org.apache.camel.kafkaconnector.CamelSinkConnector', version='0.11.0', encodedVersion=0.11.0, type=sink, typeName='sink', location='file:/milkchocolate/github-extended/target/github-extended/camel-kafka-connector-0.11.0.jar'}, PluginDesc{klass=class org.apache.camel.kafkaconnector.CamelSourceConnector, name='org.apache.camel.kafkaconnector.CamelSourceConnector', version='0.11.0', encodedVersion=0.11.0, type=source, typeName='source', location='file:/milkchocolate/github-extended/target/github-extended/camel-kafka-connector-0.11.0.jar'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorSourceConnector, name='org.apache.kafka.connect.mirror.MirrorSourceConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockConnector, name='org.apache.kafka.connect.tools.MockConnector', version='3.0.0', encodedVersion=3.0.0, type=connector, typeName='connector', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', version='3.0.0', encodedVersion=3.0.0, type=source, typeName='source', location='classpath'} at org.apache.kafka.connect.runtime.isolation.Plugins.connectorClass(Plugins.java:200) at org.apache.kafka.connect.runtime.isolation.Plugins.newConnector(Plugins.java:172) at org.apache.kafka.connect.runtime.AbstractHerder.lambda$getConnector$4(AbstractHerder.java:653) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at org.apache.kafka.connect.runtime.AbstractHerder.getConnector(AbstractHerder.java:653) at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:426) at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$2(AbstractHerder.java:362) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)

oscerd commented 2 years ago

First try the example locally. There are no instructions for it on docker.

oscerd commented 2 years ago

Also the plugin path must exists where you're running the kafka connect standalone, so you need to mount the plugin path folder from your host or copy the plugin path content in the container before starting the connect standalone.

milkchocolate commented 2 years ago

Hi Andrea,

I got the example running on my machine, thanks for your guiding👍

When I switched to local Kafka, I ran into another issue, it said java.lang.NoClassDefFoundError: org/apache/camel/kafkaconnector/CamelSourceConnectorConfig.

I was stuck by the issue for hours, then I made the change below to get everything work, is that correct?

  1. When I extract the github-extended-0.11.0-package.tar.gz file, I get a folder called "github-extended" with jars in it.
  2. So I set the plugin.path to "{path}/{parent-folder}/github-extended".
  3. The change I made is set the plugin.path to {path}/{parent-folder}.
oscerd commented 2 years ago

The plugin path point to a directoy where you'll have one or more connector, so pointing to the topc parent-folder is right.

milkchocolate commented 2 years ago

Shall we add that to the doc?

oscerd commented 2 years ago

I think it's already clear. But I'll have a look