当阅读包含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
}
答案 0 :(得分:1)
这些是所谓的墓碑事件,用于对删除的事件进行正确的组合-请参见https://kafka.apache.org/documentation/#compaction
压缩还允许删除。包含密钥和有效载荷为空的消息将被视为从日志中删除。此删除标记将导致删除所有具有该密钥的先前消息(与带有该密钥的任何新消息一样),但是删除标记的特殊之处在于,它们会在一段时间后从日志中清除,以释放空间。上图中将不再保留删除的时间点标记为“删除保留点”。