Debezium启动时是否执行预创建信号表中的增量快照?
问题描述
我对Debezium的临时增量快照信号存在疑问,场景如下:
- 在创建CDC连接器之前,已在数据库中创建信号表并插入启动快照的信号:
-- 创建信号表 CREATE TABLE debezium_signal (id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL); -- 插入启动快照的信号 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连接器启动运行时,是否会启动该增量快照?还是仅会处理连接器创建之后发送的信号?
回答
会触发这条预先插入的增量快照,具体逻辑如下:
- 当配置了
signal.enabled.channels: source时,Debezium连接器启动时会全量读取信号表的历史记录,并检查每条信号的ID是否已被自身处理过(连接器会在内部状态中跟踪已处理的信号ID)。 - 你的连接器是首次创建启动,没有任何已处理信号的记录,所以这条预先插入的
execute-snapshot信号会被识别并执行,触发针对servicedb.customers表的增量快照。 - 结合你设置的
snapshot.mode: schema_only,连接器启动时只会先同步表结构,之后立刻响应这个信号开始增量快照的执行。
补充说明:
- 连接器处理完该信号后,会在内部记录这个信号的ID,后续即使重启连接器,只要不删除连接器的状态或重新插入相同ID的信号,不会重复执行该快照。
- 如果需要再次触发相同的快照,可以插入一条新ID的
execute-snapshot信号到信号表中。
内容的提问来源于stack exchange,提问作者ljuk
相关产品推荐
相关产品推荐

