4

我正在更新到最新的 Hazelcast 版本 [3.12],我在获取 AtomicLong 实例时遇到了问题。新版本,HZ 引入了 CAP Theorem 的概念,授予 Consistency 和 Partition Tolerance,但问题是 CP 子系统必须至少有 3 个成员。

Config config = new Config();
config.getCPSubsystemConfig().setCPMemberCount(3);
config.getCPSubsystemConfig().setGroupSize(3);

HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(config);

如何配置 CP 子系统来为我提供一个只有两个 hazelcast 节点的 atomicLong 实例?

如果我只使用一个节点启动我的应用程序,则会打印以下消息:

MetadataRaftGroupManager.log:65 [127.0.0.1]:6000 [dev] [3.12] CP 子系统正在等待 3 个成员加入集群。当前成员数:1

我将只有两个节点,因此,CP 子系统不允许我使用 atomicLong,因为它将永远等待至少 3 个节点。

我刚刚调用的 3.11 版本hazelcast.getAtomicLong("count")。我该如何处理?

4

1 回答 1

2

在 3.12 中,不能将 CP 子系统配置为使用少于 3 个节点运行,因为这会牺牲“一致性”,这是 CP 子系统在某些故障场景(网络分区)下的全部目的。[编辑:请参阅下面关于 4.0 及更高版本行为的新评论]

您仍然可以使用 3.11 API,因此您从 3.11 实现中获得的代码将继续工作。尽管 3.11 API 被标记为已弃用,但它们并未被删除或禁用;弃用是一个警告,即已知 API 在脑裂情况下容易受到一致性问题的影响。一些应用程序代码可以容忍此类问题,并且该漏洞不是问题;如果您的应用程序不能容忍与 atomic long 的潜在一致性问题,则需要添加一个额外的节点以迁移到 CP 实现。

于 2019-05-02T17:14:10.453 回答