Состояние задачи соединителя не может соединиться
Состояние задачи соединителя сбой с ошибкой:
org.apache.kafka.connect.errors.ConnectException: java.lang.NoClassDefFoundError
Я использую кластер kafka connect в распределенном режиме, и я использую kafka(0.10.0.2.5) connect для развертывания ambari.
Я указал путь к соединителю debezium mysql, используя экспорт CLASSPATH=/ путь к соединителю /.
Загрузка конфигурации соединителя в Kafka Connect с помощью следующей команды:
curl -i -X POST -H "Accept:application/json" \
-H "Content-Type:application/json" http://localhost:8083/connectors/ \
-d '{
"name": "MYSQL_CONNECTOR",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "10.224.21.36",
"database.port": "3306",
"database.user": "root",
"database.password": "shobhna",
"database.server.id": "1",
"database.server.name": "demo",
"database.history.kafka.bootstrap.servers": "slnxhadoop04.noid.in:6669",
"database.history.kafka.topic": "dbhistory.demo" ,
"include.schema.changes": "true"
}
}'
Теперь, после проверки состояния разъема, я получаю сообщение об ошибке:
- {"name":"MYSQL_CONNECTOR","connector":{"state":"RUNNING","worker_id":"172.26.177.115:8083"},
"tasks":[{"state":"FAILED","trace":"org.apache.kafka.connect.errors.ConnectException:
java.lang.NoClassDefFoundError:
org/apache/kafka/clients/admin/AdminClient\n\tat
io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:218)\n\tat
io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:45)\n\tat
org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:137)\n\tat
org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:140)\n\tat
org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:175)\n\tat
java.util.concurrent.Executors$RunnableAdapter.cal(Executors.java:511)\n\tat
java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat
java.lang.Thread.run(Thread.java:745)\nCaused by:
java.lang.NoClassDefFoundError:
org/apache/kafka/clients/admin/AdminClient\n\tat
io.debezium.relational.history.KafkaDatabaseHistory.initializeStorage(KafkaDatabaseHistory.java:336)\n\tat
io.debezium.connector.mysql.MySqlSchema.intializeHistoryStorage(MySqlSchema.java:260)\n\tat
io.debezium.connector.mysql.MySqlTaskContext.initializeHistoryStorage(MySqlTaskContext.java:194)\n\tat
io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:126)\n\t...
9 more\nCaused by: java.lang.ClassNotFoundException:
org.apache.kafka.clients.admin.AdminClient \n\tat
java.net.URLClassLoader.findClass(URLClassLoader.java:381)\n\tat
java.lang.ClassLoader.loadClass(ClassLoader.java:424)\n\tat
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)\n\tat
java.lang.ClassLoader.loadClass(ClassLoader.java:357)\n\t
1 ответ
Он не может найти встроенный класс Kafka, а не ваш коннектор
NoClassDefFoundError: org / apache / kafka / clients / admin / AdminClient
...
я использую кафку (0.10.0.2.5)
Убедитесь, что вы используете 1) версию Connect Server, соответствующую вашему брокеру Kafka 2) используя Connector, который использует код для этой версии Connect
Например, AdminClient существует только в Kafka 0.11+.
В последних выпусках HDP вы получаете Kafka 1.1 (отличающийся от 0.11), и это версия, в которой последняя версия Debezium создана и протестирована на https://debezium.io/docs/releases/
Debezium нужен AdminClient для создания и регистрации информации о теме, поэтому я не уверен, будет ли она работать на старой версии, такой как 0.10
В вики Kafka говорится, что более новые версии Connect Server могут связываться со старыми брокерами, но протокол, используемый классами Connector, является предметом обсуждения.