1

我正在开发一个使用Debezium将更改从 MongoDB 流式传输到 Kafka 集群的应用程序。tl;dr - debezium 跟踪 mongo oplog 以更改文档并将整个 doc 存储在 kafka 上作为 json。

我们有一堆旧的、陈旧的生产数据,我们仍然希望按原样保留在 Kafka 上。为了让 Debezium 提取文档,它们首先必须出现在 OpLog 中。本质上,我们需要touch在我们的生产 mongo replset 中的每个文档不更改文档上的任何数据。我最初的想法是用当前内容更新一个字段:

db.contributors.update(
  {},
  {
    $set: {
      "meta.collectionName": "contributors"
    }
  },
  { multi: true}
)

但是,mongo 将其视为 noop: WriteResult({ "nMatched" : 959, "nUpserted" : 0, "nModified" : 0 })

我的问题是:是否可以$set在 MongoDB 中强制进行更新,nModified以使上述输出中的值959 实际修改任何字段?

注意:我们使用 WiredTiger 作为后端,因此我们touch无法使用 mongo 命令。

谢谢您的帮助!

4

1 回答 1

1

Debezium MongoDB 连接器将对捕获的集合进行初始同步。因此,无需“触摸”所有文档即可将它们流式传输到 Kafka。只有在创建快照后,连接器才会切换到 oplog 拖尾,以便从那里捕获所有更改。

于 2018-09-07T06:28:17.450 回答