Apache kafka Kafka JDBC源连接器插入或更新

Apache kafka Kafka JDBC源连接器插入或更新,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我配置了一个Kafka JDBC源连接器,以便将记录从PostgreSQL数据库更改(插入或更新)推送到Kafka主题上。 我使用“时间戳+递增”模式。看起来很好用。 我没有配置JDBC接收器连接器,因为我使用的是一个Kafka消费者,可以收听这个主题 主题上的消息是JSON。这是一个例子: { "schema": { "type": "struct", "fields": [ {

我配置了一个Kafka JDBC源连接器,以便将记录从PostgreSQL数据库更改(插入或更新)推送到Kafka主题上。 我使用“时间戳+递增”模式。看起来很好用。 我没有配置JDBC接收器连接器,因为我使用的是一个Kafka消费者,可以收听这个主题

主题上的消息是JSON。这是一个例子:

{
  "schema": {
    "type": "struct",
    "fields": [
      {
        "type": "int64",
        "optional": false,
        "field": "id"
      },
      {
        "type": "int64",
        "optional": true,
        "name": "org.apache.kafka.connect.data.Timestamp",
        "version": 1,
        "field": "entity_create_date"
      },
      {
        "type": "int64",
        "optional": true,
        "name": "org.apache.kafka.connect.data.Timestamp",
        "version": 1,
        "field": "entity_modify_date"
      },
      {
        "type": "int32",
        "optional": true,
        "field": "entity_version"
      },
      {
        "type": "string",
        "optional": true,
        "field": "firstname"
      },
      {
        "type": "string",
        "optional": true,
        "field": "lastname"
      }
    ],
    "optional": false,
    "name": "author"
  },
  "payload": {
    "id": 1,
    "entity_create_date": 1600287236682,
    "entity_modify_date": 1600287236682,
    "entity_version": 1,
    "firstname": "George",
    "lastname": "Orwell"
  }
}
如您所见,没有关于源连接器是否因为插入或更新而捕获此更改的信息。
我需要这个信息。如何解决?

除非在源模式和触发器中进行定制,否则使用JDBC源连接器无法获取该信息

这就是为什么基于日志的CDC通常是从源数据库获取事件的更好方法的原因之一,还有其他原因,包括:

  • 捕获删除
  • 捕获操作类型
  • 捕获所有事件,而不仅仅是连接器轮询时的事件

如需了解更多有关这方面细微差别的详细信息,请参阅。

使用@Robin Moffatt建议的基于CDC的方法可能是处理您需求的正确方法。结帐

但是,查看表数据时,您可以在使用者中使用“entity_create_date”和“entity_modify_date”来确定消息是插入还是更新。如果“实体创建日期”=“实体修改日期”,则它是一个插入,否则它是一个更新