Kafka 源连接器:有效负载模式配置

Neo4j 的 Kafka 源连接器支持两种有效负载模式来控制序列化并发布到 Kafka 主题的数据格式:EXTENDEDCOMPACT。此功能可通过 neo4j.payload-mode 属性进行配置,允许用户根据数据需求选择首选的序列化格式。

有效负载模式

neo4j.payload-mode 配置提供以下选项

  • EXTENDED(默认):为每个属性提供详细的结构,支持模式兼容性和一致性。此格式在存在模式更改(例如属性类型更改)或时间类型的情况下特别有用,确保跨更改的数据一致性。

  • COMPACT:生成仅包含基本字段的更简单的格式。此格式更轻量级,在不需要模式兼容性或复杂数据类型时可能更可取。

COMPACT 模式限制

  • 属性类型更改COMPACT 模式不支持属性类型的更改。如果 Neo4j 中的属性类型发生更改(例如,从整数更改为字符串),则可能会破坏模式。

  • Protobuf 兼容性COMPACT 模式不支持 Protobuf。它不支持时间类型的序列化(例如,LocalDateLocalDateTime)。

配置

有效负载模式可以在源连接器的设置中配置如下

"neo4j.payload-mode": "EXTENDED" // Or "COMPACT" based on requirements

示例数据格式

以下示例显示了如何在每种有效负载模式下发布数据。

COMPACT 模式示例

COMPACT 模式生成一个最小的有效负载,其中仅包含基本字段

{
  "name": "mary",
  "surname": "doe",
  "timestamp": 1729779296311
}

此模式在性能和简单性是优先级时很有用,并且适用于模式演变和时间一致性不是主要关注点的场景。

EXTENDED 模式示例

EXTENDED 模式包括其他结构和元数据以支持复杂类型和模式一致性,防止属性类型随时间变化时出现问题

{
  "name": {
    "type": "S",
    "B": null,
    "I64": null,
    "F64": null,
    "S": "mary",
    "BA": null,
    "TLD": null,
    "TLDT": null,
    "TLT": null,
    "TZDT": null,
    "TOT": null,
    "TD": null,
    "SP": null,
    "LB": null,
    "LI64": null,
    "LF64": null,
    "LS": null,
    "LTLD": null,
    "LTLDT": null,
    "LTLT": null,
    "LZDT": null,
    "LTOT": null,
    "LTD": null,
    "LSP": null
  },
  "surname": {
    "type": "S",
    "B": null,
    "I64": null,
    "F64": null,
    "S": "doe",
    "BA": null,
    "TLD": null,
    "TLDT": null,
    "TLT": null,
    "TZDT": null,
    "TOT": null,
    "TD": null,
    "SP": null,
    "LB": null,
    "LI64": null,
    "LF64": null,
    "LS": null,
    "LTLD": null,
    "LTLDT": null,
    "LTLT": null,
    "LZDT": null,
    "LTOT": null,
    "LTD": null,
    "LSP": null
  },
  "timestamp": {
    "type": "I64",
    "B": null,
    "I64": 1729779365447,
    "F64": null,
    "S": null,
    "BA": null,
    "TLD": null,
    "TLDT": null,
    "TLT": null,
    "TZDT": null,
    "TOT": null,
    "TD": null,
    "SP": null,
    "LB": null,
    "LI64": null,
    "LF64": null,
    "LS": null,
    "LTLD": null,
    "LTLDT": null,
    "LTLT": null,
    "LZDT": null,
    "LTOT": null,
    "LTD": null,
    "LSP": null
  }
}

此模式对于具有复杂模式要求的数据特别有益,因为它即使属性类型在 Neo4j 端发生更改也能确保兼容性。

了解 EXTENDED 有效负载结构

EXTENDED 模式下,每个属性都包含每个受支持的 Neo4j 类型的字段。只有与实际属性类型对应的字段将包含非空值,而所有其他字段都设置为 null。此结构确保属性类型的任何更改都不会在源连接器或接收器连接器处导致模式执行错误。

字段 描述

类型

指示属性的类型。可能的值包括:BI64F64SBATLDTLDTTLTTZDTTOTTDSP 或它们的列表等效项(例如,LBLI64LF64LSLTLD 等)。

B

布尔类型(true 或 false)

I64

64 位整数

F64

64 位浮点数

S

字符串

BA

字节数组

TLD

时间本地日期

TLDT

时间本地日期时间

TLT

时间本地时间

TZDT

时间时区日期时间

TOT

时间偏移时间

TD

时间持续时间

SP

空间点

LB、LI64、LF64、LS、LTLD 等

每个对应类型的列表

例如,字符串字段将表示为

{
  "type": "S",
  "B": null,
  "I64": null,
  "F64": null,
  "S": "actual_value",
  ...
}

配置建议

当使用其他连接器或应用程序使用生成的邮件时,COMPACT 模式非常有用且易于使用,并且您可以在目标主题上放宽模式兼容性模式。如果您的环境需要模式兼容性、时间数据类型,或者您对不同的转换器(AVROJSON 模式PROTOBUFJSON 嵌入)有严格的类型安全要求,则应首选 EXTENDED 模式。

与接收器连接器的兼容性

EXTENDED 格式是在连接器版本 5.1.0 中引入的,以确保发布到 Kafka 主题的所有数据都符合一致的模式。这可以防止 Neo4j 端的属性类型更改(例如,名称属性从整数更改为字符串)时出现问题,从而能够在连接器和 Kafka 使用者之间平滑地处理数据。当 Neo4j 接收器连接器由 Neo4j 源连接器提供数据时,建议使用 EXTENDED 模式,因为 Neo4j 接收器连接器可以无缝地处理 EXTENDED 数据类型。