在 Ignite 实例之间平均分配数据

Equal Distribution of data among Ignite instances

我有 9 个 ignite 服务器实例 I0, I1,..., I8,它们在 PARTITIONED 模式下有缓存,我在其中从 kafka 中的分区 P0, P1.....P8 并行加载数据。这里分区 P0, P1....P8 包含可以由字段 seq_no 唯一标识的条目数,我还使用 part_ID 将条目从一个分区仅并置到一个实例。我将键定义为

 class key() 
 { 
      int seq_no; 
      @AffinityKeyMapped 
      int part_ID; //for collocating entries from one partition to one instance only  
 } 

因此,我正在尝试在 ignite 实例和分区中的缓存条目之间实现一对一映射,例如I0->P0, I1->P1, .......,I8->P8。但在我的例子中,我得到的映射是

 I0-> NULL(No Entries), 
 I1-> P5, 
 I2-> NULL, 
 I3-> P7, 
 I4-> P2, P6 
 I5-> P1 
 I6-> P8 
 I7-> P0, P4 
 I8-> P3 

亲和性配置部分在这里实现,即具有相同分区 ID 的条目被缓存在相同的点燃实例上。但是,数据在 ignite 实例之间分布不均,即 I4I7 包含 2 个分区的数据,而 I0I2 不包含任何数据。那么这里如何实现数据的均分,使得每个ignite实例得到一份partition数据呢?

Apache Ignite 用户论坛也对此进行了讨论:http://apache-ignite-users.70518.x6.nabble.com/Equal-Distribution-of-data-among-Ignite-instances-td10602.html

  1. 您可以尝试删除关联键并检查数据是否在所有节点之间均匀分布吗?
  2. 检查是否所有 Ignite 服务器都是同一个 Ignite 集群的一部分,并且是否所有服务器都分配了相同的堆 space。发生这种情况的原因之一是服务器 0 和服务器 2 可能没有足够的堆 space.

此外,如果第 1 点的答案是肯定的,那么我想您将不得不实现自己的亲和力函数