Vitess 使用本地 VGTID

UseLocalVgtid SMT 将事件记录中 VGTID 的值从多个分片 VGTID 列表转换为接收到此事件更改的单个分片的 VGTID。此转换仅用于 Debezium 的 Vitess 连接器。

SMT 从事务边界事件记录的 source 块中提取 shard 字段,以确定接收到更改的分片。然后,SMT 将事件记录中的 VGTID 值设置为指定分片的 VGTID 值。其他 VGTID 值将从事件记录中删除。以下示例展示了如何将 SMT 添加到连接器配置中,以便它将多个分片的 VGTID 列表转换为单个本地 VGTID 的值。

示例:配置 UseLocalVgtid SMT

"connector.class": "io.debezium.connector.vitess.VitessConnector",
...
"transforms": "useLocalVgtid",
"transforms.useLocalVgtid.type": "io.debezium.connector.vitess.transforms.UseLocalVgtid",
...

以下示例展示了在应用转换之前和之后的记录值。

示例 1. 应用 UseLocalVgtid SMT 的效果
SMT 处理记录之前的值
{
    "source": {
        "version": "2.6.2.Final",
        "connector": "vitess",
        "name": "my_sharded_connector",
        "ts_ms": 1559033904000,
        "ts_us": 1559033904000000,
        "ts_ns": 1559033904000000000,
        "snapshot": "false",
        "db": "",
        "sequence": null,
        "keyspace": "commerce",
        "table": "customers",
        "shard": "-80",
        "vgtid": "[{\"keyspace\":\"commerce\",\"shard\":\"80-\",\"gtid\":\"MariaDB/0-54610504-47\"},{\"keyspace\":\"commerce\",\"shard\":\"-80\",\"gtid\":\"MariaDB/0-1592148-45\"}]"
    },
}
SMT 处理记录之后的值
{
    "source": {
        "version": "2.6.2.Final",
        "connector": "vitess",
        "name": "my_sharded_connector",
        "ts_ms": 1559033904000,
        "ts_us": 1559033904000000,
        "ts_ns": 1559033904000000000,
        "snapshot": "false",
        "db": "",
        "sequence": null,
        "keyspace": "commerce",
        "table": "customers",
        "shard": "-80",
        "vgtid": "[{\"keyspace\":\"commerce\",\"shard\":\"-80\",\"gtid\":\"MariaDB/0-1592148-45\"}]"
    },
}