5

我安装成功Postgres Debezium CDC。现在,我能够捕捉到数据库发生的所有变化。但问题是“之前”字段始终为空。所以,如果我插入一条记录,(id = 1, name = Bill)我就会从 Kafka 获得这些数据:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bill'}, ...

但是,如果我像这样更新记录:

UPDATE mytable set name = 'Bob' WHERE id = 1

我从卡夫卡那里得到这个:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bob'}, ...

这就是我配置连接器的方式:

curl -X POST  localhost:8083/connectors/ \
  -H "Accept:application/json" -H "Content-Type:application/json" -d \
'{
    "name": "test-connector",
    "config": {
         "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
         "tasks.max": "1",
         "plugin.name": "pgoutput",
         "database.hostname": "postgres",
         "database.port": "5432",
         "database.user": "postgres",
         "database.password": "postgres",
         "database.dbname" : "test",
         "database.server.name": "postgres",
         "database.whitelist": "public.mytable",
         "database.history.kafka.bootstrap.servers": "kafka:9092",
         "database.history.kafka.topic": "public.topic"
    }
}'

那有什么问题,我该如何解决?

4

1 回答 1

5

before是一个可选字段,如果存在,则包含事件发生之前行的状态。该字段是否可用在很大程度上取决于REPLICA IDENTITY每个表的设置。

REPLICA IDENTITYUPDATE是一个 PostgreSQL 特定的表级设置,它确定在事件和DELETE事件的情况下可用于逻辑解码的信息量。

要显示所有表格列的先前值,请将REPLICA IDENTITY级别设置为FULL

ALTER TABLE public.mytable REPLICA IDENTITY FULL;

在Debezium 文档中查看更多详细信息。

于 2020-01-20T09:22:18.233 回答