#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 .