kafka-connect-fitbit-source/Dockerfile copies the shared base module into its own directory under CONNECT_PLUGIN_PATH, alongside the connector's:
${CONNECT_PLUGIN_PATH}/kafka-connect-rest-source/
${CONNECT_PLUGIN_PATH}/kafka-connect-fitbit-source/
Kafka Connect treats every immediate subdirectory of plugin.path as a separate plugin with its own classloader, so kafka-connect-rest-source is discovered and loaded as a plugin in its own right, even though it is a base library, not something anyone deploys on its own. Its jars are also copied into the fitbit folder , so the same classes end up loaded twice in two classloaders.
Only kafka-connect-fitbit-source/ should be a plugin directory.
kafka-connect-fitbit-source/Dockerfilecopies the shared base module into its own directory underCONNECT_PLUGIN_PATH, alongside the connector's:Kafka Connect treats every immediate subdirectory of
plugin.pathas a separate plugin with its own classloader, sokafka-connect-rest-sourceis discovered and loaded as a plugin in its own right, even though it is a base library, not something anyone deploys on its own. Its jars are also copied into the fitbit folder , so the same classes end up loaded twice in two classloaders.Only
kafka-connect-fitbit-source/should be a plugin directory.