【发布时间】:2020-11-29 11:31:34
【问题描述】:
我有一个项目,我需要使用 java 从 JSON 文件中获取数据并将其接收到 kafka 主题中,然后将该主题中的数据接收到 mongodb。 我找到了 kafka-mongodb 连接器,但该文档仅可用于使用融合平台进行连接。 我试过了:
- 从 Maven 下载 mongo-kafka-connect-1.2.0.jar。
- 将文件放入/kafka/plugins
- 在 connect-standalone.properties 中添加了这一行“plugin.path=C:\kafka\plugins”。
- 创建了 MongoSinkConnector.properties。
name=mongo-sink
topics=test
connector.class=com.mongodb.kafka.connect.MongoSinkConnector
tasks.max=1
key.ignore=true
# Specific global MongoDB Sink Connector configuration
connection.uri=mongodb://localhost:27017
database=student_kafka
collection=students
max.num.retries=3
retries.defer.timeout=5000
type.name=kafka-connect
然后我运行了命令
.\bin\windows\connect-standalone.bat .\config\connect-standalone.properties .\config\MongoSinkConnector.properties
我收到了这个错误
[2020-08-09 20:18:30,329] ERROR Stopping after connector error (org.apache.kafka.connect.cli.ConnectStandalone)
java.util.concurrent.ExecutionException: java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: com/mongodb/ConnectionString
at org.apache.kafka.connect.util.ConvertingFutureCallback.result(ConvertingFutureCallback.java:115)
at org.apache.kafka.connect.util.ConvertingFutureCallback.get(ConvertingFutureCallback.java:99)
at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:118)
Caused by: java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: com/mongodb/ConnectionString
at com.mongodb.kafka.connect.sink.MongoSinkConfig.createConfigDef(MongoSinkConfig.java:248)
at com.mongodb.kafka.connect.sink.MongoSinkConfig.<clinit>(MongoSinkConfig.java:139)
at com.mongodb.kafka.connect.MongoSinkConnector.config(MongoSinkConnector.java:72)
at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:366)
at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: com/mongodb/ConnectionString
... 10 more
Caused by: java.lang.ClassNotFoundException: com.mongodb.ConnectionString
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 10 more
编辑: 感谢 BogdanSucaciu 的帮助,我找到了解决方案。
您需要将以下 jars 添加到 kafka/lib 文件夹中。
- mongodb-driver-3.12.7.jar 和 mongodb-driver-core-3.12.7.jar 和 mongo-java-driver-3.12.6.jar 和 mongo-kafka-connect-1.0.1.jar。
- PS:我在使用最新的 mongo-kafka-connect 时遇到了一些问题。所以我不得不使用这个版本。
【问题讨论】:
-
你可以在启动时发布工作日志吗?它应该包含类似
Loading plugin from: ... -
我找不到那行,这是我执行命令后的完整日志:pastebin.pl/view/c97dbf03再次感谢您
-
你确定这是完整的日志吗?它应该以这样的
Kafka Connect standalone worker initializing ...开头 -
是的,我很确定这是一个屏幕截图。 prnt.sc/tx6611
-
有趣,连记录器都没有加载...你可以尝试使用不同的连接器(例如:file-source-connector)吗?我想确定问题是连接器本身还是您的设置(Java / OS)
标签: mongodb apache-kafka