与 Neo4j 集群一起使用

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

Kafka Connect Neo4j 连接器的最新版本可以在这里找到 这里

概述

Neo4j 集群 是企业版中提供的一项功能,它允许数据库高可用性。

Neo4j 插件

当 Neo4j Streams 插件与 Neo4j 集群一起使用时,需要注意以下几点

  • 该插件必须存在于**所有集群成员**的插件目录中,而不仅仅是一个。

  • 配置设置必须存在于

    • 4.0.7 之前版本的**所有 neo4j.conf 文件**中,而不仅仅是一个;

    • 4.0.7 及其之后的版本的**所有 streams.conf 文件**中,而不仅仅是一个。

在集群生命周期中,领导者可能会发生变化;因此,插件必须存在于任何地方,而不仅仅是在领导者上。

插件会检测领导者,并且不会尝试对 follower 执行写入操作(例如,在使用者的情况下),因为在那里操作会失败。插件会根据需要检查集群拓扑。

此外,对于 CDC,需要注意的是,从 Neo4j 3.5 开始,已提交的事务也仅在领导者上发布。实际上,这意味着当新的数据提交到 Neo4j 时,如果配置了生产者,则领导者将把该数据发布回 Kafka。

neo4j 流实用程序过程,特别是CALL streams.publish,可以在任何集群成员或只读副本上工作。CALL streams.consume 也可在任何集群成员上使用,但是需要注意的是,由于 Neo4j 中集群的工作方式,将streams.consume与写入操作一起使用在集群 follower 或只读副本上将不起作用,因为只有领导者才能处理写入操作。

远程客户端

有时会有远程应用程序通过官方驱动程序与 Neo4j 通信,并且希望使用流功能。在这些情况下,最佳实践是

  • 在客户端应用程序中与集群通信时,始终使用neo4j://驱动程序 URI。

  • 在客户端应用程序中使用显式写入事务,当使用诸如CALL streams.consume之类的过程调用时,以确保路由驱动程序将查询路由到领导者。