Kafka Connect找不到连接器

时间:2018-11-21 13:01:06

标签: apache-kafka apache-kafka-connect confluent

我正在尝试使用Kafka Connect Elasticsearch连接器,但未成功。它崩溃并显示以下错误:

[2018-11-21 14:48:29,096] ERROR Stopping after connector error (org.apache.kafka.connect.cli.ConnectStandalone:108)
java.util.concurrent.ExecutionException: org.apache.kafka.connect.errors.ConnectException: Failed to find any class that implements Connector and which name matches io.confluent.connect.elasticsearch.ElasticsearchSinkConnector , available connectors are: PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', version='1.0.1', encodedVersion=1.0.1, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', version='1.0.1', encodedVersion=1.0.1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockConnector, name='org.apache.kafka.connect.tools.MockConnector', version='1.0.1', encodedVersion=1.0.1, type=connector, typeName='connector', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', version='1.0.1', encodedVersion=1.0.1, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', version='1.0.1', encodedVersion=1.0.1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', version='1.0.1', encodedVersion=1.0.1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', version='1.0.1', encodedVersion=1.0.1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', version='1.0.1', encodedVersion=1.0.1, type=source, typeName='source', location='classpath'}

我已经在kafka子文件夹中解压缩了插件的构建,并且在connect-standalone.properties中包含以下行:

plugin.path=/opt/kafka/plugins/kafka-connect-elasticsearch-5.0.1/src/main/java/io/confluent/connect/elasticsearch

我可以看到该文件夹​​中的各种连接器,但是Kafka Connect不会加载它们;但确实会加载标准连接器,如下所示:

[2018-11-21 14:56:28,258] INFO Added plugin 'org.apache.kafka.connect.transforms.Cast$Value' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:136)
[2018-11-21 14:56:28,259] INFO Added aliases 'FileStreamSinkConnector' and 'FileStreamSink' to plugin 'org.apache.kafka.connect.file.FileStreamSinkConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:335)
[2018-11-21 14:56:28,260] INFO Added aliases 'FileStreamSourceConnector' and 'FileStreamSource' to plugin 'org.apache.kafka.connect.file.FileStreamSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:335)

如何正确注册连接器?

3 个答案:

答案 0 :(得分:3)

已编译的JAR必须可用于Kafka Connect。您在这里有一些选择:

  1. 使用Confluent平台,其中包括预先构建的https://www.confluent.io/download/的Elasticsearch(及其他)。有zip,rpm / deb,Docker映像等可用。

  2. 自己构建JAR。这通常涉及:

    cd kafka-connect-elasticsearch-5.0.1
    mvn clean package
    

    然后采用生成的kafka-connect-elasticsearch-5.0.1.jar JAR并将其放在Kafka Connect with plugin.path中配置的路径中。

您可以在此处找到有关使用Kafka Connect的更多信息:

免责声明:我为Confluent工作,并写了上述博客文章。

答案 1 :(得分:3)

昨天我在没有融合平台等的docker上的kafka上手动运行了jdbc连接器,只是为了了解这些东西在下面如何工作。我不必在我这边或类似的东西上盖罐子。希望这对您有意义-我所做的是(我将跳过Docker部件如何通过连接器等方式挂载dir):

  • https://www.confluent.io/connector/kafka-connect-jdbc/下载连接器,解压缩zip
  • 将zip的内容放到属性文件中配置的路径中的目录中(如下第3点所示)-

    plugin.path=/plugins
    

    所以树看起来像这样:

    /plugins/
    └── jdbcconnector
        └──assets
        └──doc
        └──etc
        └──lib
    

    请注意 lib 目录的依赖项所在,其中之一是 kafka-connect-jdbc-5.0.0.jar

  • 现在您可以尝试运行连接器

    ./connect-standalone.sh connect-standalone.properties jdbc-connector-config.properties
    
    在我的情况下,

    connect-standalone.properties是kafka-connect所需的常用属性:

    bootstrap.servers=localhost:9092
    key.converter=org.apache.kafka.connect.json.JsonConverter
    value.converter=org.apache.kafka.connect.json.JsonConverter
    key.converter.schemas.enable=true
    value.converter.schemas.enable=true
    offset.storage.file.filename=/tmp/connect.offsets
    offset.flush.interval.ms=10000
    plugin.path=/plugins
    rest.port=8086
    rest.host.name=127.0.0.1
    

    jdbc-connector-config.properties涉及更多,因为它只是为此特定连接器的配置,您需要深入研究连接器文档-对于jdbc源,它是https://docs.confluent.io/current/connect/kafka-connect-jdbc/source-connector/source_config_options.html

答案 2 :(得分:1)

插件路径必须加载JAR文件,其中包含编译后的代码,而不是源代码(src/main/java的原始Java类。

它还必须是包含这些插件的其他目录的父目录。

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

哪里

$ ls - lR /opt/kafka-connect/plugins/
kafka-connect-elasticsearch-x.y.z/
    file1.jar
    file2.jar 
    etc

Ref-Manually installing Community Connectors

Confluent Platform中的Kafka Connect启动脚本也会自动(用于?)读取与share/java/kafka-connect-*匹配的所有文件夹,因此这是一种方法。至少,如果您还将Confluent软件包安装的share/java文件夹的路径也包含在插件路径中,则它将继续这样做

如果您对Maven不太熟悉,或者即使您不熟悉Maven,那么实际上您不能只克隆第一个Kafka的Elasticsearch连接器存储库和build the master branch; it has prerequisites,然后是第一个通用的Confluent存储库。否则,您必须检出与Confluent发行版匹配的5.0.1-post之类的Git标签。

一个更简单的选择是grab the package using Confluent Hub CLI

如果这些都不起作用,那么最简单的方法就是下载Confluent平台并使用Kafka Connect脚本。这并不意味着您需要使用

中的Kafka或Zookeeper配置