变形

架构变更事件过滤

qianmoQqianmoQ· 更新于 2026-09-28· 阅读 7 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

SchemaChangeEventFilter

使用 SchemaChangeEventFilter 单消息转换(SMT)可以过滤连接器从表中捕获并发送到 Kafka 的模式变更事件。启用该 SMT 后,连接器只会将未被过滤的 DDL 事件同步到 Kafka,从而让你能够控制哪些 DDL 操作会暴露给消费应用程序。

模式变更事件过滤配置

要使用该转换,需将 SchemaChangeEventFilter 添加到连接器配置中,并指定要移除的事件类型。下面的连接器配置片段展示了如何将该转换添加到连接器,并将其设置为从连接器捕获的 DDL 消息中移除 DROP 和 TRUNCATE 事件。

用于移除 DROP 和 TRUNCATE 事件的模式变更事件过滤配置

transforms=filterTableDropAndTruncateEvent
transforms.filterTableDropAndTruncateEvent.type=io.debezium.transforms.SchemaChangeEventFilter
transforms.filterTableDropAndTruncateEvent.schema.change.event.exclude.list=DROP,TRUNCATE

有关配置该转换的更多信息,请参阅架构变更事件过滤配置选项。

应用 SchemaChangeEventFilter SMT 的效果

为连接器配置好该 SMT 之后,每当连接器捕获到与已配置类型相匹配的架构变更事件时,它都会将这些事件的值重置为 null。连接器不会将结果值为 null 的事件发送到 Kafka。

下面的示例展示了由 SMT 处理之前的架构变更事件记录,以及该事件经过 SMT 过滤后的输出。

示例 1. 由 SchemaChangeEventFilter 转换处理之前的架构变更事件记录

{
    "schema":{
        "type":"struct",
        "fields":[
            {
                "type":"int64",
                "optional":false,
                "field":"ts_ms"
            },
            {
                "type":"string",
                "optional":true,
                "field":"databaseName"
            },
            {
                "type":"string",
                "optional":true,
                "field":"schemaName"
            },
            {
                "type":"string",
                "optional":true,
                "field":"ddl"
            },
            {
                "type":"array",
                "items":{
                    "type":"struct",
                    "fields":[
                        {
                            "type":"string",
                            "optional":false,
                            "field":"type"
                        },
                        {
                            "type":"string",
                            "optional":false,
                            "field":"id"
                        }
                    ],
                    "optional":false,
                    "name":"io.debezium.connector.schema.Change"
                },
                "optional":false,
                "field":"tableChanges"
            }
        ],
        "optional":false,
        "name":"filter.SchemaChangeValue"
    },
    "payload":{
        "ts_ms":1691035505397,
        "databaseName":"test",
        "schemaName":"test_schema",
        "ddl":"",
        "tableChanges":[
            {
                "type":"DROP",
                "id":"test.table"
            }
        ]
    }
}

基于前面的配置示例,SMT 处理原始 schema 变更事件之后,会将 DROP 事件的值重置为 null,如下例所示:

示例 2. SMT 处理后的 schema 变更事件记录

null

配置选项

下表列出了可与 SchemaChangeEventFilter SMT 一起使用的配置选项。

表 1. SchemaChangeEventFilter SMT 配置选项

属性 说明 类型 默认值 有效值
schema.change.event.exclude.list 以逗号分隔的要过滤的模式变更事件列表。请指定以下选项中的一个或多个:
- CREATE
- ALTER
- DROP
- TRUNCATE
- DATABASE
字符串 无默认值 非空字符串

评论

登录后参与评论

正在加载评论…