关键策略

Kafka Connect Neo4j 连接器是将 Kafka 与 Neo4j 集成的推荐方法,因为 Neo4j Streams 不再处于积极开发状态,并且在 Neo4j 4.4 版本之后将不再提供支持。

Kafka Connect Neo4j 连接器的最新版本可在此处找到。

对于streams.source.topic.relationships.<TOPIC_NAME>.key_strategy=default,当我为关系生成消息时,将仅返回一个关联的节点约束,并根据以下规则。

如果存在多个约束,我们将按关联到约束的属性数量进行排序,然后按标签名称(按字母顺序)排序,最后按属性名称(按字母顺序)排序。

最后,我们将采用第一个的属性。

因此,如果我们有一个具有标签PersonOther的起始节点,并且我们创建了以下两个约束

CREATE CONSTRAINT ON (p:Other) ASSERT p.zxc IS UNIQUE;
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE;

生成的start.ids字段将是

{"zxc": "FooBar"}

因为属性大小相同(即 1),但第一个标签按名称是Other

否则,使用

CREATE CONSTRAINT ON (p:Other) ASSERT p.zxc IS UNIQUE;
CREATE CONSTRAINT ON (p:Other) ASSERT p.name IS UNIQUE;

生成的start.ids字段将是

{"name": "Sherlock"}

因为name属性名称与zxc相比。

否则,使用streams.source.topic.relationships.<TOPIC_NAME>.key_strategy=all,将生成参与唯一约束的任何属性。因此,对于具有标签PersonOtherAnother的起始节点,以及以下约束

CREATE CONSTRAINT ON (p:Another) ASSERT p.zxc IS UNIQUE;
CREATE CONSTRAINT ON (p:Other) ASSERT p.name IS UNIQUE;
CREATE CONSTRAINT ON (p:Person) ASSERT p.surname IS UNIQUE;

生成的start.ids字段将是

{ "name": "Sherlock", "surname": "Holmes", "zxc": "FooBar"}