7.6. 将消息标头转换为事件记录值
HeaderToValue SMT 从事件记录中提取指定的标头字段,然后复制或将标头字段移到事件记录中的值。move 选项会在将标头中完全删除字段,然后再将它们添加为有效负载中的值。您可以将 SMT 配置为操作原始消息中的多个标头。您可以使用点表示法在要嵌套标头字段的有效负载中指定节点。有关配置 SMT 的更多信息,请参见以下示例。
7.6.1. 示例: Debezium HeaderToValue SMT 的基本配置 复制链接链接已复制到粘贴板!
要将事件记录中的消息标头提取到记录值中,请在连接器的 Kafka Connect 配置中配置 HeaderToValue SMT。您可以将转换配置为删除原始标头或复制它们。要从记录中删除标头字段,请将 SMT 配置为使用 move 操作。要在原始记录中保留标头字段,请将 SMT 配置为使用 copy 操作。例如,要从事件消息中删除标头 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
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
以下示例显示了应用转换前和之后事件记录的标头和值。
例 7.1. 应用 HeaderToValue SMT 的影响
- 事件记录在由
HeaderToValue转换处理前 - SMT 处理事件记录前的标头
{ "header_x": 0, "event_timestamp": 1626102708861, "key": 100, }{ "header_x": 0, "event_timestamp": 1626102708861, "key": 100, }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SMT 处理事件记录前的值
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 事件在由
HeaderToValue转换处理后的事件记录 - SMT 删除指定字段后的标头
{ "header_x": 0 }{ "header_x": 0 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SMT 将标头字段移到值后的值
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.2. 用于配置 HeaderToValue 转换的选项 复制链接链接已复制到粘贴板!
下表列出了您可以在 HeaderToValue SMT 中使用的配置选项。
| 属性 | 描述 | 类型 | default | 有效值 | 重要信息 |
| 记录中以逗号分隔的标头名称列表,其值要复制或移到记录值。 | list | 没有默认值 | 非空列表 | high | |
| 字段 |
以逗号分隔的字段名称列表,其顺序与标头配置属性中列出的 | list | 没有默认值 | 非空列表 | high |
|
指定以下选项之一: | string | 没有默认值 | 移动或复制 | high |