HeaderToValue

HeaderToValue SMT 从事件记录中提取指定的头字段,然后将头字段复制或移动到事件记录中的值。move 选项会在将头字段添加为载荷中的值之前,将其从头中完全移除。您可以配置 SMT 来操作原始消息中的多个头。您可以使用点表示法来指定要在其中嵌套头字段的载荷中的节点。有关配置 SMT 的更多信息,请参阅下面的 示例

示例

要将事件记录中的消息头提取到记录值中,请在连接器的 Kafka Connect 配置中配置 HeaderToValue SMT。您可以配置转换以移除原始头或复制它们。要从记录中移除头字段,请将 SMT 配置为使用 move 操作。要保留原始记录中的头字段,请将 SMT 配置为使用 copy 操作。例如,要从事件消息中移除 event_timestampkey 头,请将以下行添加到您的连接器配置中:

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

以下示例显示了在应用转换之前和之后的事件记录的头和值。

示例 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,
            "ts_us": 1559033904863091,
            "ts_ns": 1559033904863091000,
            "snapshot": true,
            "db": "postgres",
            "sequence": "[\"24023119\",\"24023128\"]"
            "schema": "public",
            "table": "customers",
            "txId": 555,
            "lsn": 24023128,
            "xmin": null
        },
        "op": "c",
        "ts_ms": 1559033904863,
        "ts_us": 1559033904863741,
        "ts_ns": 1559033904863741697
    }
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,
            "ts_us": 1559033904863697,
            "ts_ns": 1559033904863697000,
            "snapshot": true,
            "db": "postgres",
            "sequence": "[\"24023119\",\"24023128\"]"
            "schema": "public",
            "table": "customers",
            "txId": 555,
            "lsn": 24023128,
            "xmin": null,
            "id": 100
        },
        "op": "c",
        "ts_ms": 1559033904863,
        "ts_us": 1559033904863631,
        "ts_ns": 1559033904863631584,
        "event_timestamp": 1626102708861
    }

配置选项

下表列出了您可以在 HeaderToValue SMT 中使用的配置选项。

表 1. HeaderToValue SMT 配置选项

属性

描述

Type

Default (默认值)

有效值

重要性

记录中要复制或移动到记录值的头名称的逗号分隔列表。

列表

无默认值

非空列表

字段名称的逗号分隔列表,顺序与 headers 配置属性中列出的头名称相同。使用点表示法指示 SMT 将字段嵌套到消息载荷的特定节点中。有关如何配置 SMT 使用点表示法的信息,请参阅本主题前面出现的 示例

列表

无默认值

非空列表

指定以下选项之一:move:: SMT 将头字段移动到事件记录中的值,并从头中移除这些字段。copy:: SMT 将头字段复制到事件记录中的值,并保留原始头字段。

string

无默认值

move 或 copy