当从带有debezium的mongoDB中读取时,KafkaConnect会产生空值的CDC事件

时间:2019-04-12 09:24:26

标签: mongodb apache-kafka-connect debezium

当阅读包含Kafka-Connect使用debezium产生的许多CDC事件并且数据源位于TTL的mongodb集合中的kafka主题时,我看到了一些CDC事件为null,它们在删除事件之间。到底是什么意思?

据我了解,所有CDC事件都应具有CDC事件结构,甚至删除事件也应如此,为什么会有具有空值的事件?

null,
{
  "after": null,
  "patch": null,
  "source": {
    "version": "0.9.3.Final",
    "connector": "mongodb",
    "name": "test",
    "rs": "rs1",
    "ns": "testestest",
    "sec": 1555060472,
    "ord": 297,
    "h": 1196279425766381600,
    "initsync": false
  },
  "op": "d",
  "ts_ms": 1555060472177
},
null,
{
  "after": null,
  "patch": null,
  "source": {
    "version": "0.9.3.Final",
    "connector": "mongodb",
    "name": "test",
    "rs": "rs1",
    "ns": "testestest",
    "sec": 1555060472,
    "ord": 298,
    "h": -2199232943406075600,
    "initsync": false
  },
  "op": "d",
  "ts_ms": 1555060472177
}

我使用https://debezium.io/docs/connectors/mongodb/而不展平任何事件,并按如下方式使用配置:

{   
    "connector.class": "io.debezium.connector.mongodb.MongoDbConnector",
    "mongodb.hosts": "live.xxx.xxx:27019",
    "mongodb.name": "testmongodb",
    "collection.whitelist": "testest",
    "tasks.max": 4,
    "snapshot.mode": "never",
    "poll.interval.ms": 15000
}

1 个答案:

答案 0 :(得分:1)

这些是所谓的墓碑事件,用于对删除的事件进行正确的组合-请参见https://kafka.apache.org/documentation/#compaction

  

压缩还允许删除。包含密钥和有效载荷为空的消息将被视为从日志中删除。此删除标记将导致删除所有具有该密钥的先前消息(与带有该密钥的任何新消息一样),但是删除标记的特殊之处在于,它们会在一段时间后从日志中清除,以释放空间。上图中将不再保留删除的时间点标记为“删除保留点”。