我正在尝试使用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)
如何正确注册连接器?
答案 0 :(得分:3)
已编译的JAR必须可用于Kafka Connect。您在这里有一些选择:
使用Confluent平台,其中包括预先构建的https://www.confluent.io/download/的Elasticsearch(及其他)。有zip,rpm / deb,Docker映像等可用。
自己构建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):
将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配置