【发布时间】:2019-11-16 21:23:59
【问题描述】:
目的是演示数据平衡和计算配置。为此,我想将 100000 条记录加载到 ignite 集群中。 (使用来自 ignite-spring 的 IgniteRepository),并使用 IgniteRunnable 执行 affinityRun,该 IgniteRunnable 通过某些搜索条件检索数据并进行处理。
Ignite 始终将计算作业传递给另一个节点(与我提交的位置不同),但是,所有 100K 记录都在该单个节点上处理。 所以要么我的数据不平衡,要么affinityRun没有生效。 提前感谢您的帮助!
点燃配置
@Bean
public Ignite igniteInstance() {
IgniteConfiguration config = new IgniteConfiguration();
CacheConfiguration cache = new CacheConfiguration("ruleCache");
cache.setIndexedTypes(String.class, RuleDO.class);
//config.setPeerClassLoadingEnabled(true);
cache.setRebalanceBatchSize(24);
config.setCacheConfiguration(cache);
Ignite ignite = Ignition.start(config);
return ignite;
}
RestController方法触发处理
@RequestMapping("/processOnNode")
public String processOnNode(@RequestParam("time") String time) throws Exception {
IgniteCache<Integer, String> cache = igniteInstance.cache("ruleCache");
igniteInstance.compute().affinityRun(Collections.singletonList("ruleCache"), 0, new NodeRunnable(time));
return "done";
}
NodeRunner -> 运行()
@Override
public void run() {
final RuleIgniteRepository igniteRepository = SpringContext.getBean(RuleIgniteRepository.class);
igniteRepository.findByTime(time).stream().forEach(ruleDO -> System.out.println(ruleDO.getId() + " : " + ruleDO));
System.out.println("done on the node");
}
我希望 100k 处理平均分布在我的 3 个节点上。
【问题讨论】:
-
你确定你的节点已经组成集群了吗?可以分享所有节点的最新“拓扑快照”消息吗?
-
是的,他们有\n 2019-11-06 15:53:14.872 INFO 28248 --- [main] o.a.i.i.m.d.GridDiscoveryManager:拓扑快照 [ver=2,locNode=29994e83,servers=2,clients =0,状态=ACTIVE,CPUs=4,offheap=6.1GB,heap=6.8GB] 2019-11-06 15:53:13.559 信息 28306 --- [vent-worker-#42] o.a.i.i.m.d.GridDiscoveryManager:拓扑快照 [ ver=2,locNode=b90ccd61,servers=2,clients=0,state=ACTIVE,CPUs=4,offheap=6.1GB,heap=6.8GB]
-
你有坚持吗?否则,记录似乎应该均匀分布在 2 个节点之间。
-
@alamar - 是的,我正在使用 ignite-spring 存储库在 ignite 中进行内存持久性。有没有办法我可以看到节点明智的数据分布?
-
您可以使用 Web 控制台来做到这一点。
标签: ignite