在使用docker时,尝试使用postgres debezium连接器运行kafka connect时遇到问题,它找不到位于debezium-core
jar中的某个类。
我已经下载了debezium postgres插件,并将其内容复制到了我定义的plugin.path
路径(/kafka/plugins
)。
即使kafka connect先加载debezium核心和api,错误仍然会出现。
这是日志:
kafka-connect_1 | [2020-08-13 14:06:13,543] INFO Scanning for plugin classes. This might take a moment ... (org.apache.kafka.connect.cli.ConnectDistributed)
kafka-connect_1 | [2020-08-13 14:06:13,564] INFO Loading plugin from: /kafka/plugins/debezium-api-1.3.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,628] INFO Registered loader: PluginClassLoader{pluginLocation=file:/kafka/plugins/debezium-api-1.3.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,628] INFO Added plugin 'org.apache.kafka.connect.connector.policy.AllConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,628] INFO Added plugin 'org.apache.kafka.connect.connector.policy.PrincipalConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,629] INFO Added plugin 'org.apache.kafka.connect.connector.policy.NoneConnectorClientConfigOverridePolicy' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,629] INFO Loading plugin from: /kafka/plugins/debezium-core-1.3.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,762] INFO Registered loader: PluginClassLoader{pluginLocation=file:/kafka/plugins/debezium-core-1.3.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,762] INFO Added plugin 'io.debezium.converters.ByteBufferConverter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,762] INFO Added plugin 'io.debezium.converters.CloudEventsConverter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Added plugin 'io.debezium.transforms.outbox.EventRouter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Added plugin 'io.debezium.transforms.ExtractNewRecordState' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Added plugin 'io.debezium.transforms.ContentBasedRouter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Added plugin 'io.debezium.transforms.ByLogicalTableRouter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Added plugin 'io.debezium.transforms.Filter' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,763] INFO Loading plugin from: /kafka/plugins/protobuf-java-3.8.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,879] INFO Registered loader: PluginClassLoader{pluginLocation=file:/kafka/plugins/protobuf-java-3.8.0.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,879] INFO Loading plugin from: /kafka/plugins/debezium-connector-postgres-1.3.0.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
kafka-connect_1 | [2020-08-13 14:06:13,917] ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed)
kafka-connect_1 | java.lang.NoClassDefFoundError: io/debezium/util/IoUtil
kafka-connect_1 | at io.debezium.connector.postgresql.Module.<clinit>(Module.java:19)
kafka-connect_1 | at io.debezium.connector.postgresql.PostgresConnector.version(PostgresConnector.java:47)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:380)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:385)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:355)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:328)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:261)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.registerPlugin(DelegatingClassLoader.java:253)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:222)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:199)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:60)
kafka-connect_1 | at org.apache.kafka.connect.cli.ConnectDistributed.startConnect(ConnectDistributed.java:91)
kafka-connect_1 | at org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:78)
kafka-connect_1 | Caused by: java.lang.ClassNotFoundException: io.debezium.util.IoUtil
kafka-connect_1 | at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
kafka-connect_1 | at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
kafka-connect_1 | at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:104)
kafka-connect_1 | at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
我尝试了在stackoverflow和其他站点上发现的其他问题中提出的不同解决方案,这些解决方案似乎无济于事,原因是某些插件已被识别并成功加载,但是{{ 1}}一个不是...
任何解决问题的方法?谢谢!
答案 0 :(得分:0)
解决方案是将整个文件夹原样复制到容器中,而不是将每个文件都复制到插件路径中。
在我的docker文件中:
除了执行COPY ./docker/kafka-connect/debezium-connector-postgres /kafka/plugins
之外,
我将包含插件的debezium-connector-postgres
文件夹放到connectors
内的另一个名为./docker/
的文件夹中,
然后将执行的操作更改为COPY ./docker/kafka-connect/connectors /kafka/plugins
,这将在容器的/kafka/plugins
中创建一个新文件夹。