Kafka-kinesis 连接器错误:无法启动任务 XXX-0 (org.apache.kafka.connect.runtime.Worker:652)

问题描述 投票:0回答:1

我正在关注 kinesis-kafka GitHub 站点上的教程https://github.com/awslabs/kinesis-kafka-connector

到目前为止,我已经使用 maven 编译了 kinesis-kaka-connector.jar 类库,并且我正在尝试运行连接器。

我没有将 kinesis-kaka-connector.jar 的路径导出到 CLASSPATH,因为我不知道具体怎么做,而是通过添加行(类似apache Kafka QuickStart 教程),看似正确地将 Kafka 连接到类。

plugin.path=kinesis-kafka-connector/target/kinesis-kafka-connector.jar

这修复了之前的错误,即当我尝试将 .jar 文件添加到 $JAVA_HOME/lib/ext 时找不到 kinesis-kafka-connector 类。现在, 当我使用命令时包括一个错误:

$ bin/connect-standalone.sh PATH/worker.properties  PATH/kinesis-firehose-kafka-connector.properties

出现如下错误:

ERROR [kinesis-kafka-connector-firehose|task-0] Failed to start task kinesis-kafka-connector-firehose-0 (org.apache.kafka.connect.runtime.Worker:652)
java.lang.NoClassDefFoundError: com/amazonaws/services/kinesisfirehose/model/AmazonKinesisFirehoseException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:735)
    at org.apache.kafka.common.config.ConfigDef.parseValue(ConfigDef.java:490)
    at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:483)
    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:113)
    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:146)
    at org.apache.kafka.connect.runtime.TaskConfig.<init>(TaskConfig.java:51)
    at org.apache.kafka.connect.runtime.Worker.startTask(Worker.java:607)
    at org.apache.kafka.connect.runtime.Worker.startSinkTask(Worker.java:521)
    at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.startTask(StandaloneHerder.java:392)
    at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:385)
    at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:379)
    at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.updateConnectorTasks(StandaloneHerder.java:436)
    at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.lambda$null$2(StandaloneHerder.java:231)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.kinesisfirehose.model.AmazonKinesisFirehoseException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:136)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 22 more

最后,最后一行输出是:

INFO Created connector kinesis-kafka-connector-firehose (org.apache.kafka.connect.cli.ConnectStandalone:113)

连接器似乎继续运行。 连接器真的启动了吗?

我的 kinesis firehose 已连接到 S3 存储桶,但我没有看到任何记录通过。如上所示,有两个相互冲突的输出以及错误。

有人对这个问题有任何见解吗?我不明白 NoClassDefFoundError。这是由我将 Kafka-connect 指向 kinesis-kafka-connect.jar 的方法引起的吗?我觉得这不是问题,我希望这只是配置设置错误,也许我在 AWS 上的身份验证或 IAM 策略配置不正确。该错误似乎是一个流水错误。

提前致谢,我已经尝试搜索其他问题。

apache-kafka apache-kafka-connect amazon-kinesis
1个回答
0
投票

ClassNotFound 是一个 JVM 类加载(即

plugin.path
)问题,与 AWS / 其他连接器配置无关。

在实际加载类之前必须创建连接器,因此您还会看到该日志。

plugin.path
需要是磁盘上的绝对路径,指向包含该连接器的所有 JAR 的文件夹(即使只有一个)

所以,在 connect-standalone.properties 中尝试

plugin.path=/opt/kafka-connect-plugins

然后在终端中,创建一个新文件夹

$ mkdir -p /opt/kafka-connect-plugins/kinesis-connector
$ chmod -R 770 /opt/kafka-connect-plugins

然后将插件移到那里

$ mv $HOME/kinesis-kafka-connector/target/*  /opt/kafka-connect-plugins/kinesis-connector

您不需要设置 CLASSPATH 变量,但这看起来像

$ export CLASSPATH="/path/to/files/*.jar"
$ connect-standalone.sh connect-standalone.properties kinesis.properties
© www.soinside.com 2019 - 2024. All rights reserved.