KafkaConnect создает событие CDC с нулевым значением при чтении из MongoDB с помощью debezium

#mongodb #apache-kafka-connect #debezium

#mongodb #apache-kafka-connect #debezium

Вопрос:

При чтении раздела kafka, который содержит множество событий CDC, созданных с помощью Kafka-Connect using debezium , а источник данных находится в коллекции mongodb TTL , я увидел, что некоторые события 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:

Это так называемые события tombstone, используемые для правильного уплотнения удаленных событий — см. https://kafka.apache.org/documentation/#compaction

Сжатие также позволяет удалять. Сообщение с ключом и нулевой полезной нагрузкой будет рассматриваться как удаление из журнала. Этот маркер удаления приведет к удалению любого предыдущего сообщения с этим ключом (как и любое новое сообщение с этим ключом), но маркеры удаления являются особыми в том смысле, что они сами будут удалены из журнала через некоторое время, чтобы освободить место. Момент времени, в который удаления больше не сохраняются, отмечен как «точка хранения удаления» на приведенной выше диаграмме.