gpt4 book ai didi

java - Hazelcast 直写映射存储在启动时预填充

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:45 24 4
gpt4 key购买 nike

我目前正在做一个 POC 以开发一个分布式、容错的 ETL 生态系统。我选择了 Hazelcast 用于我的集群(数据+通知) 目的。谷歌搜索 Hazelcast 资源花了我 to this link它完全符合我的想法,使用基于 map 的解决方案。

我需要明白一点。在此之前,请允许我对我们的架构给出一个规范的想法:

假设 我们有 2 个节点 A、B 运行通过 hazelcast 集群的服务器实例。 A 说,其中之一是接受请求的监听器(但可以在故障转移时更改)。

A 收到请求并将其放入分布式 map 。该映射是直写式的,由持久存储支持,并且在节点上配置了单个内存备份。

每个实例都有一个本地映射条目监听器,在添加条目事件时,它将(异步/排队)处理该条目,然后将其从分布式映射中删除。

这按预期工作。

问题:

假设已收到 10 个请求并在每个节点上分发 5 个。每个节点上的 2 个条目已被处理,现在两个实例都崩溃了。

所以现在后备数据存储中总共有 6 个条目。

现在我们提出这两个实例。根据文档 - “自 1.9.3 起,MapLoader 具有新的 MapLoader.loadAllKeys API。它用于在首次触摸/使用 map 时预填充内存中的 map ”

我们通过简单地加载存储中存在的所有键值来实现 loadAllKeys()

  1. 那么这是否意味着有可能两个实例现在都将加载 6 个条目并处理它们(从而导致重复处理)? 或者是否以同步方式处理,以便在集群中只加载一次?

  2. 在服务器启动时,我需要处理挂起的条目(如果有的话)。我看到数据已加载,但未触发 entryAdded 事件。如何触发 entryAdded 事件(或任何其他优雅的方式,通过这种方式我将知道启动时有待处理的条目)?

请求建议。

谢谢,苏塔努

最佳答案

  1. 在初始化时,将调用 loadAllKeys(),这将返回持久存储中的所有 6 个键。然后每个节点将选择它拥有的 key 并只加载它们。所以 A 可能加载 2 个条目,而 B 加载剩余的 4 个。

  2. store.load 不会触发入口监听器。怎么样:初始化之后,注册你的监听器之后,你可以得到localEntries并处理现有的。

关于java - Hazelcast 直写映射存储在启动时预填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405377/

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