代码之家  ›  专栏  ›  技术社区  ›  ljuk

连接器启动时的Debezium信号表

  •  0
  • ljuk  · 技术社区  · 1 年前

    我对 Ad hoc snapshot signals 在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连接器开始运行时,它会启动我的增量快照吗?

    还是只考虑连接器创建后发送的信号?

    1 回复  |  直到 1 年前
        1
  •  1
  •   shazin    1 年前
    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等于父表(debezium_signal)中的id。

    我们在生产中看到,由于您的数据列等大数据,当更新/插入率较高时,一些CDC事件不会被触发。

    当CDC事件被激发时,您总是可以从子表中查询数据列。