简体   繁体   English

下沉kafka话题到mongodb

[英]Sink kafka topic to mongodb

I have a project where I need to get data from JSON files using java and sink it into kafka topic, and then sink that data from the topic to mongodb.我有一个项目,我需要使用 java 从 JSON 文件中获取数据并将其下沉到 kafka 主题中,然后将该主题中的数据下沉到 mongodb 中。 I have found the kafka-mongodb connector, but the documentation is available only to connect using confluent plateform.我找到了 kafka-mongodb 连接器,但该文档仅可用于使用融合平台进行连接。 I have tried:我努力了:

  • Download mongo-kafka-connect-1.2.0.jar from Maven.从 Maven 下载 mongo-kafka-connect-1.2.0.jar。
  • Put the file in /kafka/plugins将文件放入 /kafka/plugins
  • Added this line "plugin.path=C:\kafka\plugins" in connect-standalone.properties.在 connect-standalone.properties 中添加了这一行“plugin.path=C:\kafka\plugins”。
  • created MongoSinkConnector.properties.创建了 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

and than I ran the command然后我运行了命令

.\bin\windows\connect-standalone.bat.\config\connect-standalone.properties.\config\MongoSinkConnector.properties

I got this error我收到了这个错误

[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

EDIT: Thanks to BogdanSucaciu for the help, I have found a solution for this.编辑:感谢 BogdanSucaciu 的帮助,我找到了解决方案。

You need to add the following jars into kafka/lib folder.您需要将以下 jars 添加到 kafka/lib 文件夹中。

  1. mongodb-driver-3.12.7.jar and mongodb-driver-core-3.12.7.jar and mongo-java-driver-3.12.6.jar and mongo-kafka-connect-1.0.1.jar. mongodb-driver-3.12.7.jar and mongodb-driver-core-3.12.7.jar and mongo-java-driver-3.12.6.jar and mongo-kafka-connect-1.0.1.jar.
  2. PS: I have had some problems working with the latest mongo-kafka-connect. PS:我在使用最新的 mongo-kafka-connect 时遇到了一些问题。 so I had to work with this version.所以我不得不使用这个版本。

You are missing the MongoDB driver.您缺少 MongoDB 驱动程序。 The MongoDB connector jar contains only the classes relevant to Kafka Connect but it still needs a driver to be able to connect to a MongoDB instance. MongoDB 连接器 jar 仅包含与 Kafka Connect 相关的类,但它仍然需要一个驱动程序才能连接到 MongoDB 实例。 You would need to download that driver and copy the jar file to the same path where you've published your connector ( C:\kafka\plugins ).您需要下载该驱动程序并将 jar 文件复制到您发布连接器的同一路径( C:\kafka\plugins )。

To keep things clean you should also create another folder inside that plugins directory ( eg: C:\kafka\plugins\mongodb ) and move all the stuff relevant to this connector there.为了保持干净,您还应该在该插件目录中创建另一个文件夹(例如: C:\kafka\plugins\mongodb )并将与此连接器相关的所有内容移到那里。

Later Edit:后期编辑:

I went through an old(er) setup that I had with Kafka Connect and MongoDB Sink connector and I found the following jars:我通过 Kafka Connect 和 MongoDB Sink 连接器进行了旧的设置,发现以下 jars: 在此处输入图像描述

This makes me believe that the kafka-connect-mongdb jar and the mongodb-driver won't be enough.这让我相信kafka-connect-mongdb jar 和mongodb-driver是不够的。 You can give it a try though.不过你可以试一试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM