簡體   English   中英

下沉kafka話題到mongodb

[英]Sink kafka topic to mongodb

我有一個項目,我需要使用 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 文件夾中。

  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.
  2. PS:我在使用最新的 mongo-kafka-connect 時遇到了一些問題。 所以我不得不使用這個版本。

您缺少 MongoDB 驅動程序。 MongoDB 連接器 jar 僅包含與 Kafka Connect 相關的類,但它仍然需要一個驅動程序才能連接到 MongoDB 實例。 您需要下載該驅動程序並將 jar 文件復制到您發布連接器的同一路徑( C:\kafka\plugins )。

為了保持干凈,您還應該在該插件目錄中創建另一個文件夾(例如: C:\kafka\plugins\mongodb )並將與此連接器相關的所有內容移到那里。

后期編輯:

我通過 Kafka Connect 和 MongoDB Sink 連接器進行了舊的設置,發現以下 jars: 在此處輸入圖像描述

這讓我相信kafka-connect-mongdb jar 和mongodb-driver是不夠的。 不過你可以試一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM