gpt4 book ai didi

java - 保持内存图数据库的所有实例同步

转载 作者:行者123 更新时间:2023-12-02 03:40:51 26 4
gpt4 key购买 nike

我们正在构建一个 java 应用程序,它将使用嵌入式 Neo4j 进行图形遍历。以下是我们要使用嵌入式版本而不是集中式服务器的原因

  1. 此应用不是数据所有者。数据将通过其他应用程序摄取。将数据保存在本地将有助于我们快速计算,从而改善我们的 API SLA。
  2. 由于数据占用量很小,我们不想维护集中式服务器,这会产生额外的成本和维护费用。
  3. 不需要额外的缓存

现在这种架构带来了两个挑战。首先如何同时更新嵌入式 Neo4j 应用程序的所有实例中的数据。其次如何确保所有实例同步,即使用相同版本的数据。

我们想到使用 Kafka 来解决第一个问题。想法是在所有实例中让 kafka 监听器具有不同的 groupid(以确保所有更新)。每当有更新时,事件都会发布在kafka中。所有实例都会监听事件并执行更新操作。

但是我们仍然没有任何可靠的设计来解决第二个问题。由于各种原因,其中一个实例可能会错过该事件(它的使用者已关闭)。其中一种方法是通过调用数据所有者应用程序的 api 来不断检查最新版本。如果版本落后,则重播事件。但这会带来维护所有更新的事件日志的额外复杂性。你们认为是否可以用更好、更简单的方式来完成?

最佳答案

一旦正确配置,Kafka 消费者就非常一致和可靠,因此他们没有任何理由错过消息,除非存在基础设施问题,在这种情况下,您可以使用任何解决方案建筑师会有问题。如果 Kafka 集群运行状况良好(例如,至少有一个数据副本可用,并且至少法定动物园管理员已启动并正在运行),那么您的消费者应该会收到来自他们订阅的主题的每条消息。只要您的超时/重试配置合理,消费者将自行处理重试/重新连接。最新 kafka 版本中的默认配置在 99% 的情况下都足够了。

另外,您可以添加一个单独的线程,例如,不断检查每个主题/分区的最新偏移量,并将其与消费者上次收到的内容进行比较,并可能发出问题如果存在差异,则会发出警报/警告。根据我的经验,以及 Kafka 的可靠性,它应该是不必要的,但它可以让你安心,而且添加起来应该不会太困难。

关于java - 保持内存图数据库的所有实例同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com