【问题标题】:Connector task state fails to connect连接器任务状态连接失败
【发布时间】:2019-02-01 19:04:30
【问题描述】:

连接器的任务状态因错误而失败:

org.apache.kafka.connect.errors.ConnectException: java.lang.NoClassDefFoundError

我在分布式模式下运行 kafka connect 集群,我正在使用 ambari 部署的 kafka(0.10.0.2.5) connect。

我使用 export CLASSPATH=/path to connector/ 给出了 debezium mysql 连接器路径。

使用以下命令将连接器配置加载到 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

【问题讨论】:

  • 粘贴并在您的问题中包含错误,而不是附加屏幕截图。

标签: java apache-kafka apache-kafka-connect debezium


【解决方案1】:

它找不到内置的 Kafka 类,而不是您的连接器

NoClassDefFoundError: org/apache/kafka/clients/admin/AdminClient

...

我正在使用卡夫卡(0.10.0.2.5)

确保您正在运行 1) 与您的 Kafka 代理匹配的 Connect Server 版本 2) 使用使用该版本 Connect 的代码的连接器

例如,AdminClient 仅存在于 Kafka 0.11+ 中。

在最近的 HDP 版本中,您获得了 Kafka 1.1(不同于 0.11),这是最新的 Debezium 构建并针对 https://debezium.io/docs/releases/ 进行测试的版本

Debezium 需要 AdminClient 来制作和注册主题信息,所以我不确定它是否适用于 0.10 等旧版本

它在 Kafka wiki 中声明,较新版本的 Connect Server 可以与旧代理进行通信,但连接器类使用的协议有待讨论。

【讨论】:

  • 是的,请尝试 Kafka 0.11 或更高版本。我想它可以工作,尽管我们最近将测试限制在 1.x。如果之前已经手动创建了所需的主题,我们也可以解决缺少 AdminClient 的问题。随意为此创建一个 JIRA 问题。一般来说,此时我们关注 Kafka >= 1.0,但如果不是太多努力,我们也许可以应用此更改。
  • 感谢@Gunnar - 随意代表我创建 JIRA。
  • LOL,玩得很好 ;) 提交 DBZ-883 以跟踪此要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2015-09-15
  • 2020-01-03
  • 2022-01-22
  • 2017-11-09
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多