Hazelcast AtomicLong 多个成员离开时数据丢失

Hazelcast AtomicLong Data loss When multiple member left

当多个成员与集群断开连接时,Hazelcast 失败。 我的场景非常基本,我的配置有 3 个 bakcup 选项(它不起作用)。我在一个集群中有 4 个成员,我使用 AtomicLong API 来保存我的键->值。当所有成员都活着时,一切都是完美的。但是,当我同时杀死 2 个成员时(没有等待一段时间)会发生一些数据丢失。我的会员数总是 4。有什么办法可以避免这种数据丢失?

  Config config = new Config();
  NetworkConfig network = config.getNetworkConfig();
  network.setPort(DistributedCacheData.getInstance().getPort());
  config.getCacheConfig("default").setBackupCount(3);
  JoinConfig join = network.getJoin();
  join.getMulticastConfig().setEnabled(false);
  join.getTcpIpConfig().setEnabled(true);  
  config.setNetworkConfig(network);
  config.setInstanceName("member-name-here");

谢谢。

IAtomicLong 有硬编码的 1 个同步备份,你不能配置它有超过 1 个备份。您正在做的是使用 3 个备份配置 Cache

下面的示例演示了 IMap

的多个成员断开连接
Config config = new Config();
config.getMapConfig("myMap").setBackupCount(3);
HazelcastInstance[] instances = {
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config)
};
IMap<Integer, Integer> myMap = instances[0].getMap("myMap");
for (int i = 0; i < 1000; i++) {
    myMap.set(i, i);
}
System.out.println(myMap.size());
instances[1].getLifecycleService().terminate();
instances[2].getLifecycleService().terminate();
System.out.println(myMap.size());