Hello Mans, Ignite data partitioning and distribution is defined by the AffinityFunction [1]. Basically, this is a three-step process:
Given a key K, Ignite first determines an affinity key AK using configured AffinityKeyMapper. Then, for the given affinity key AK a corresponding partition is determined using AffinityFunction#partition(Object) method. Finally, a primary and backup node is determined by the current partition-to-node assignment. The ideal partition-to-node assignment is defined by AffinityFunction#assignPartitions(AffinityFunctionContext) method, but when topology changes, actual partition-to-node mapping may differ from ideal one until after rebalancing is finished. Partition count is always limited, defined by the affinity function and cannot be changed at runtime. You need to restart the whole cluster to change the number of partitions. Rebalancing starts automatically when a node joins or leaves the cluster. You can configure a rebalance delay using CacheConfiguration#setRebalanceDelay(long) method. If rebalance delay is greater than 0, then Ignite will wait the given number of milliseconds before actual rebalancing starts. If rebalanceDelay is -1, rebalancing will not be started automatically. You can trigger rebalancing manually using IgniteCache#rebalance() method. Can you elaborate on what you mean by customization of data rebalancing? There is a set of configuration properties related to rebalancing, take a look at CacheConfiguration javadoc [2], all those method names start with setRebalance*(). Hope this helps, --AG [1] https://apacheignite.readme.io/docs/affinity-collocation#affinity-function [2] https://ignite.apache.org/releases/1.6.0/javadoc/org/apache/ignite/configuration/CacheConfiguration.html
