debezium postgres не может найти `io / debezium / util / IoUtil`

#linux #apache-kafka-connect #debezium

#linux #apache-kafka-connect #debezium

Вопрос:

У меня возникла проблема при попытке запустить kafka connect с помощью postgres debezium connector при использовании docker, он не может найти определенный класс, который находится в 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 и других сайтах, ни одно из них не кажется полезным, причина в том, что некоторые из плагинов распознаны и успешно загружены, но debezium-connect-postgres один — нет…

Есть решение проблемы? Спасибо!

Ответ №1:

Решением было скопировать всю папку как есть в контейнер вместо копирования каждого файла в путь к плагину.

В моем файле docker: вместо выполнения COPY ./docker/kafka-connect/debezium-connector-postgres /kafka/plugins ,

Я поместил debezium-connector-postgres папку, содержащую плагин, в другую папку с именем, connectors которая находится внутри ./docker/ , а затем выполненное действие изменилось, COPY ./docker/kafka-connect/connectors /kafka/plugins что приводит к созданию новой папки внутри /kafka/plugins контейнера.

Ответ №2:

При развертывании Debezium с использованием нового ресурса KafkaConnector

Что касается ошибки: java.lang.NoClassDefFoundError: io/debezium/util/IoUtil я выполнил следующие шаги.

Предполагается, что вы уже загрузили connector. Если нет, вы можете загрузить debezium-connector-mysql из репозитория maven. Я использовал версию 1.9.5.Final

Примечание: Совместимость версий лучше посмотреть в обзоре выпусков Debezium

После того, как вы извлекли содержимое connector, ниже приводится содержимое моего Dockerfile :

 FROM quay.io/strimzi/kafka:0.28.0-kafka-3.1.0
USER root:root
RUN mkdir -p /opt/kafka/plugins/debezium
COPY ./debezium-connector-mysql/ /opt/kafka/plugins/debezium/
USER 1001
  

Рассмотрев, что у нас есть Dockerfile в текущем пути и извлеченной папке debezium-connector-mysql

docker build -t debezium-connector-mysql:0.28.0-kafka-3.1.0 .