保持内存中graph db的所有示例同步

i2loujxw  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(451)

我们正在构建一个java应用程序,它将使用嵌入式neo4j进行图形遍历。下面是我们希望使用嵌入式版本而不是集中式服务器的原因
此应用不是数据所有者。数据将通过其他应用程序接收。在本地保存数据将有助于我们进行快速计算,因此它将改进我们的api sla。
由于数据足迹很小,我们不想维护集中式服务器,这将导致额外的成本和维护。
不需要额外的缓存
现在这种架构带来了两个挑战。首先介绍了如何同时更新所有嵌入式neo4j应用示例中的数据。其次,如何确保所有示例都是同步的,即使用相同版本的数据。
我们想用Kafka来解决第一个问题。这个想法是让kafka侦听器在所有示例中使用不同的groupid(以确保获得所有更新)。每当有更新,事件将张贴在Kafka。所有示例都将侦听事件并执行更新操作。
然而,我们仍然没有任何坚实的设计来解决第二个问题。由于各种原因,其中一个示例可能会错过事件(其使用者已关闭)。其中一种方法是通过调用数据所有者应用程序的api来不断检查最新版本。如果版本落后,则重播事件。但这会增加维护所有更新的事件日志的复杂性。你们觉得能不能用更好更简单的方法?

ix0qys7i

ix0qys7i1#

一旦您正确配置了kafka消费者,他们将是非常一致和可靠的,因此他们不应该有任何理由错过消息,除非存在基础设施问题,在这种情况下,您构建的任何解决方案都会有问题。如果kafka集群是健康的(例如,至少有一个数据副本可用,并且至少quorum zookeers已启动并运行),那么您的消费者应该收到来自他们订阅的主题的每一条消息。使用者将自行处理重试/重新连接,只要超时/重试配置正常。Kafka最新版本中的默认配置在99%的时间内是足够的。
另外,您可以添加一个单独的线程,例如,该线程不断检查每个主题/分区的最新偏移量,并将其与使用者上次收到的偏移量进行比较,如果存在差异,可能会发出警报/警告。以我的经验,加上Kafka的可靠性,它应该是没有必要的,但它可以给你心灵的平静,不应该太难添加。

相关问题