13.6. 将消息标头转换为事件记录值
HeaderToValue
SMT 从事件记录中提取指定的标头字段,然后将标头字段复制到事件记录中的值。移动
选项会完全从标头中删除字段,然后再将它们作为有效负载中的值添加。您可以配置 SMT 以操作原始消息中的多个标头。您可以使用点表示法在有效负载中指定您要嵌套标头字段的节点。有关配置 SMT 的更多信息,请参见以下示例。
13.6.1. 示例: Debezium HeaderToValue
SMT 的基本配置
要在事件记录中提取消息标头到记录值中,请在连接器的 Kafka Connect 配置中配置 HeaderToValue
SMT。您可以配置转换以删除原始标头或复制它们。要从记录中删除标头字段,请将 SMT 配置为使用 move
操作。要在原始记录中保留标头字段,请将 SMT 配置为使用 复制操作
。例如,要从事件信息中删除标头 event_timestamp
和 key
,请在连接器配置中添加以下行:
transforms=moveHeadersToValue transforms.moveHeadersToValue.type=io.debezium.transforms.HeaderToValue transforms.moveHeadersToValue.headers=event_timestamp,key transforms.moveHeadersToValue.fields=timestamp,source.id transforms.moveHeadersToValue.operation=move
以下示例显示了应用转换前和之后事件记录的标头和值。
例 13.1. 应用 HeaderToValue
SMT 的影响
- 由
HeaderToValue
转换处理前的事件记录 - SMT 处理事件记录的标头
{ "header_x": 0, "event_timestamp": 1626102708861, "key": 100, }
- SMT 处理事件记录前的值
{ "before": null, "after": { "id": 1, "first_name": "Anne", "last_name": "Kretchmar", "email": "annek@noanswer.org" }, "source": { "version": "2.1.3.Final", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": true, "db": "postgres", "sequence": "[\"24023119\",\"24023128\"]" "schema": "public", "table": "customers", "txId": 555, "lsn": 24023128, "xmin": null }, "op": "c", "ts_ms": 1559033904863 }
- 由
HeaderToValue
转换处理的事件记录 - SMT 删除指定字段后的标头
{ "header_x": 0 }
- SMT 移动标头字段到值后的值
{ "before": null, "after": { "id": 1, "first_name": "Anne", "last_name": "Kretchmar", "email": "annek@noanswer.org" }, "source": { "version": "2.1.3.Final", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": true, "db": "postgres", "sequence": "[\"24023119\",\"24023128\"]" "schema": "public", "table": "customers", "txId": 555, "lsn": 24023128, "xmin": null, "id": 100 }, "op": "c", "ts_ms": 1559033904863, "event_timestamp": 1626102708861 }
13.6.2. 用于配置 HeaderToValue
转换的选项
下表列出了可用于 HeaderToValue
SMT 的配置选项。
属性 | 描述 | 类型 | Default(默认) | 有效值 | 重要性 |
标头 | 记录中以逗号分隔的标头名称列表,其值要复制或移到记录值。 | list | 没有默认值 | 非空列表 | high |
字段 |
以逗号分隔的字段名称列表,其顺序与 | list | 没有默认值 | 非空列表 | high |
指定以下选项之一: | string | 没有默认值 | move 或 copy | high |