首页 > 解决方案 > 使用 PER_NODE 策略的 MaxSizeConfig 大小

问题描述

MaxSizeConfig 坏了吗?我希望 map 最多包含 2000 个条目,然后才开始驱逐旧条目,但是当我插入 2000 个条目时,我得到 340 个驱逐。

@Bean
public Config hazelCastConfig() {
    Config config = new Config();
    config.setProperty("hazelcast.logging.type", "slf4j");
 // config.setProperty("hazelcast.partition.count", "2");

    MapConfig mapConfig = new MapConfig()
            .setBackupCount(0)
            .setName("map")
            .setEvictionPolicy(EvictionPolicy.LRU)
            .setMaxSizeConfig(new MaxSizeConfig(2000, MaxSizeConfig.MaxSizePolicy.PER_NODE))
            .addEntryListenerConfig(new EntryListenerConfig(new ExampleEntryListener(), false, true));
    config.addMapConfig(mapConfig);

    return config;
}

找到这个关于驱逐的公式:https ://docs.hazelcast.org/docs/3.12/manual/html-single/index.html#understanding-map-eviction

partition-maximum-size = max-size * member-count / partition-count

在我的情况下,partition-count=271, member-count=1(运行嵌入了 hazelcast 实例的 spring-boot 应用程序)。因此,要保证存储 2000 个,最大大小需要为:

max-size = partition-maximum-size * partition-count / member-count

最大尺寸 = 2000 * 271 / 1 = 471000

471000 对于只有 2000 个条目来说似乎太大了。当我设置 max-size=6000 hazelcast 似乎至少保留 2000 个条目。

问题:我的配置/公式有什么问题?如何配置 hazelcast 以严格保存 X 条目 PER_NODE。因此,当应用程序部署时(1 个节点用于 TEST,2 个节点用于 PRELIVE)hazelcast 形成 2 个(或 1 个)成员的集群,集群内有 2000 个条目,而不是更多,没有用花哨的公式计算任何东西,只指定 2000?

标签: hazelcast

解决方案


以下是使用 PER_NODE 配置最大大小时发生的情况:

configuredEntrySize=2000, PER_NODE

totalEntrySize=configuredEntrySize*memberCount(测试环境2000,PRELIVE 4000)

默认情况下,您有 271 个分区

perPartitionEntrySize=totalEntrySize/partitionCount(7个测试环境,14个PRELIVE)

hash_of_the_key%partitionCount当您将条目放入映射时,hazelcast 会使用键 ( )的哈希找出条目应该存储在哪个分区。如果您的数据不是完全统一的,您将有超过 7 个条目存储在某些分区中,因此会被驱逐。

你可以把 Hazelcast 想象IMap成一个地图数组,数组的大小就是分区数。每个成员存储该数组的某些部分。假设MemberA存储 map-0、map-3、map-6 ... MemberB存储map-1、map-4、map-7 ... MemberC存储map-2、map-5、map-8 ... Hazelcast使用键的哈希从这个数组中选择一个映射,并将您的条目存储在这个选定的映射中。当您调用 IMap.size() 时,会向每个成员发送一个操作,收集这些地图的所有大小并作为总数返回。由于对每次驱逐检查都执行此操作不是最理想的,因此 Hazelcast 根据您配置的内容计算每个分区的最大大小,并将该数字用作每个地图的最大大小。


推荐阅读