7.6. 将消息标头转换为事件记录值


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

7.6.1. 示例: Debezium HeaderToValue 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
Copy to Clipboard Toggle word wrap

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

例 7.1. 应用 HeaderToValue SMT 的影响

事件记录在由 HeaderToValue 转换处理前
SMT 处理事件记录前的标头
{
    "header_x": 0,
    "event_timestamp": 1626102708861,
    "key": 100,
}
Copy to Clipboard Toggle word wrap
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
    }
Copy to Clipboard Toggle word wrap
事件在由 HeaderToValue 转换处理后的事件记录
SMT 删除指定字段后的标头
{
    "header_x": 0
}
Copy to Clipboard Toggle word wrap
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
    }
Copy to Clipboard Toggle word wrap

7.6.2. 用于配置 HeaderToValue 转换的选项

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

Expand
表 7.6. HeaderToValue SMT 配置选项

属性

描述

类型

default

有效值

重要信息

headers

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

list

没有默认值

非空列表

high

字段

以逗号分隔的字段名称列表,其顺序与标头配置属性中列出的 标头 名称相同。使用点表示法指示 SMT 在消息有效负载的特定节点中嵌套字段。有关如何将 SMT 配置为使用点表示法的详情,请参考本主题前面出现 的示例

list

没有默认值

非空列表

high

operation

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

string

没有默认值

移动或复制

high

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat