使用 Schema Registry

Neo4j 是一个无模式数据库,这在需要将消息转换为 Avro、Protobuf 或 JSON Schema 等模式格式以通过 Kafka 传输时会带来挑战。由于图数据的灵活性,可能会出现模式冲突。为减轻冲突,关键是建立结构化的模式强制和验证方法。

强制结构

在 Neo4j 中使用 Avro、Protobuf 或 JSON Schema 等模式格式时,建议投入精力在数据内部强制结构。这包括

  • 导出属性的类型一致性:确保 Source 连接器导出的属性在同一标签的所有节点以及同一类型的所有关系中具有相同的类型。

  • 类型与存在约束:利用 Neo4j Enterprise 和 AuraDB 中提供的类型和存在约束。详情请参阅 Cypher 手册

演进图结构

在演进图数据结构时,需要提前规划,考虑 Schema Registry 的兼容模式。例如,在默认兼容模式(BACKWARD)下,添加新属性通常是安全的。但删除属性或更改类型需谨慎,因为它们可能在模式版本之间引入冲突。

根据具体需求和数据结构,可能需要将兼容模式更改为 NONE 等更低级别。但在实施之前,务必彻底测试兼容性更改。

处理非结构化图数据

如果图数据难以结构化或演进,建议探索是否可以放宽兼容模式并在消费者侧管理模式更改。如果不可行,建议使用无模式消息格式。但使用无模式消息格式时,将失去基于模式的类型转换支持。