连接器启动时的 Debezium 信号表

问题描述 投票:0回答:1

我对 debezium 中的临时快照信号有疑问

假设我在创建 CDC 连接器之前已在数据库中创建了信号表

-- Creating the signal table
CREATE TABLE debezium_signal (id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL);

-- Starting a snapshot
INSERT INTO debezium_signal (id, type, data)
VALUES ('d139b9b7-7777-4547-917d-e1775ea61d41', 'execute-snapshot', '{"data-collections": ["servicedb.customers"]}')

现在,创建并填充此表后,我使用此配置创建 CDC 连接器:

{
    "name": "my_awesome_cdc_connector",
    "database.dbname": "servicedb",
    "table.include.list": "customers",
    "topic.prefix": "servicedb",
    "snapshot.mode": "schema_only",
    "snapshot.locking.mode": "none",
    "signal.enabled.channels": "source",
    "signal.data.collection": "servicedb.debezium_signal",
    "incremental.snapshot.allow.schema.changes": "true",
    "incremental.snapshot.chunk.size": 1024,
    "tombstones.on.delete": "true",
    "database.ssl.mode": "preferred",
    "poll.interval.ms": "1000",
    "max.batch.size": "1000",
    "output.data.format": "AVRO",
    "tasks.max": "1",
    "status": "RUNNING"
}

我的问题是:

由于我的 debezium_signal 表中已经有一个条目,当 CDC 连接器开始运行时,它会启动我的增量快照吗?

或者它只会考虑连接器创建后发送的信号?

apache-kafka debezium cdc
1个回答
0
投票
As I already have an entry in my debezium_signal table, When the CDC connector starts running, will it start my incremental snapshot?

Or will it only consider the signals sent after the connector creation?

CDC 不会针对现有数据触发,只会针对创建 CDC 配置并运行后插入表中的数据触发。

但是您仍然可以通过更新具有相同值的列来重新触发表中已存在的旧数据的 CDC。

例如:-

UPDATE debezium_signal SET type = 'execute-snapshot' WHERE id = 'd139b9b7-7777-4547-917d-e1775ea61d41'

这不会对现有数据进行任何更改,但会具有数据库的条目 WAL,CDC 将使用该条目重新触发。

但是我强烈建议向配置了 CDC 的表添加时间戳列,并将数据列移动到子表,该子表具有 id 列和数据列,并且 id 等于父表中的 id (debezium_signal )表。

我们在生产中看到,当由于数据列等大数据导致更新/插入率较高时,某些 CDC 事件不会被触发而引起问题。

当 CDC 事件触发时,您始终可以从子表中查询数据列。

© www.soinside.com 2019 - 2024. All rights reserved.