我正在开发一个使用Debezium的应用程序,以将更改从MongoDB流式传输到Kafka集群。 tl; dr-debezium尾随mongo oplog进行文档更改,并将整个文档作为json存储在kafka上。
我们有很多较旧的,过时的生产数据,我们仍然希望按原样保留在Kafka上。为了让Debezium提取文档,它们首先必须出现在OpLog中。本质上,我们需要touch
在生产mongo复制集中的每个文档,而不更改该文档上的任何数据。我最初的想法是使用当前内容更新字段:
db.contributors.update(
{},
{
$set: {
"meta.collectionName": "contributors"
}
},
{ multi: true}
)
但是,mongo将其视为noop:
WriteResult({ "nMatched" : 959, "nUpserted" : 0, "nModified" : 0 })
我的问题是:是否可以在MongoDB中强制进行$set
更新,以使上述输出中的nModified
的值实际上是959
没有修改任何字段?
请注意:我们将WiredTiger用作后端,因此mongo touch
命令对我们不可用。
感谢您的帮助!
答案 0 :(得分:0)
Debezium MongoDB连接器将对捕获的集合执行initial sync。因此,无需“触摸”所有文档即可将它们流式传输到Kafka。只有创建了该快照后,连接器才会切换到oplog尾部,以便从那里捕获所有更改。