如何在只有 2 个 Hazelcast 集群节点的 Hazelcast CP 子系统上使用 AtomicLong?

How to use AtomicLong on Hazelcast CP Subsystem with just 2 Hazelcast cluster nodes?

我正在更新到最新的 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 Subsystem is waiting for 3 members to join the cluster. Current member count: 1

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

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

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

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