如何使用Ignite瘦客户端创建缓存时指定分区数?
关于Ignite瘦客户端缓存分区配置的问题解答
核心结论
瘦客户端无法通过ClientCacheConfiguration直接设置缓存分区数,因为缓存的分区规则属于服务端拓扑配置,由Ignite集群节点控制,而非客户端侧配置。
1. 默认分区数是多少?
通过瘦客户端创建缓存时,若服务端未预先配置或创建过该缓存,Ignite会使用默认的1024个分区——这是Ignite全局默认的分区数量,厚客户端未显式指定时也会采用该值。
2. 为什么瘦客户端不能配置分区数?
ClientCacheConfiguration仅负责定义客户端与服务端交互的行为参数(比如读写同步模式、原子性等),而缓存分区数、亲和函数这类核心拓扑配置,必须在服务端节点的配置中定义,或者在第一次创建缓存时通过厚客户端/服务端API指定。
瘦客户端本质是轻量级连接,不参与集群拓扑管理,因此没有权限修改服务端的缓存核心配置。
3. 如何实现指定分区数的需求?
有两种可行方案:
- 预创建缓存:先用厚客户端或服务端节点代码,按照原有逻辑创建好指定分区数的缓存(即你之前的厚客户端代码),之后瘦客户端直接调用
igniteClient.getCache(cacheName)使用该缓存即可,缓存的分区配置会沿用已有的设置。 - 全局默认配置:在所有Ignite服务端节点的配置中,设置全局默认的亲和函数及分区数:
这样后续无论用厚客户端还是瘦客户端创建缓存,都会自动使用这个全局默认的分区数。IgniteConfiguration igniteCfg = new IgniteConfiguration(); // 设置全局默认的分区数为自定义值 igniteCfg.setDefaultAffinity(new RendezvousAffinityFunction(true, partitionCount)); Ignition.start(igniteCfg);
代码对比
原厚客户端创建缓存的代码(支持指定分区数):
public static IgniteCache<String, Value> getOrCreateCache(Ignite ignite, String cacheName, int partitionCount) { return ignite.getOrCreateCache( new CacheConfiguration<String, Value>(cacheName) .setGroupName("group") .setBackups(0) .setCacheMode(CacheMode.PARTITIONED) .setAtomicityMode(CacheAtomicityMode.ATOMIC) .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC) .setAffinity(new RendezvousAffinityFunction(true, partitionCount)) ); }
瘦客户端创建缓存的代码(无需设置分区,依赖服务端配置):
public static ClientCache<String, Value> getOrCreateCache(IgniteClient igniteClient, String cacheName) { return igniteClient.getOrCreateCache( new ClientCacheConfiguration() .setName(cacheName) .setGroupName("group") .setBackups(0) .setCacheMode(CacheMode.PARTITIONED) .setAtomicityMode(CacheAtomicityMode.ATOMIC) .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC) ); }
注意:缓存一旦创建,分区数无法修改,必须确保第一次创建时就设置好正确的分区数量。
内容的提问来源于stack exchange,提问作者coffman21
相关产品推荐
相关产品推荐

