覆盖 Mongo 源连接器

Overriding Mongo Source connector

我将使用 Kafka 连接来使用来自 MongoDB 的消息并发布到 Kafka 主题中。

默认情况下Mongo 源连接器为每个集合创建一个主题。但是我会有很多集合,并且希望所有集合只有一个主题。消息将具有集合名称。

  1. 覆盖mongo-源连接器是否是更好的方法?如果是这样,我应该牢记的是什么
  2. 是否已经提供了任何设置?我知道在创建它时将 collection 指定为空会监听所有集合。但它会为每个集合创建一个主题。

正如@onecricketeer 建议的那样,我使用了 RegexRouter。因此无需覆盖 mongo 源连接器即可将所有集合中的文档发布到同一主题中。

这是我的配置,它监听所有匹配管道的集合并发布到mongodbTopic

{
"name": "mongo-source",
"config": {
    "tasks.max": "1",
    "connector.class": "com.mongodb.kafka.connect.MongoSourceConnector",
    "connection.uri": "<connection_uri>",
    "topic.prefix": "",
    "pipeline": "[{\"$match\": { \"$or\": [{\"fullDocument._kind\":\"collection\"},{\"fullDocument._isInverse\":false}],\"ns.coll\": {\"$regex\": /^(.*_related)$|^(my_collection_test)$/}}}]",
    "poll.await.time.ms": 5,
    "poll.max.batch.size": 2000,
    "transforms": "dropPrefix",
    "transforms.dropPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.dropPrefix.regex": ".*",
    "transforms.dropPrefix.replacement": "mongodbTopic",
    "errors.tolerance": "none",
    "copy.existing": true
    }
}

了解更多信息 https://docs.confluent.io/platform/current/connect/transforms/regexrouter.html