我希望在Apache风暴中或者换句话说分布式窗口操作中并行化窗口操作。当我们在单个节点中运行窗口时以及在多个节点中分布式地分配其操作时,我需要比较性能。任何帮助表示赞赏。
您无法在多个工作人员之间共享该窗口。
如果您对拥有多个并发窗口感到满意,则可以增加运行窗口螺栓的执行程序的数量。你可以通过将parallellism_hint
的setBolt
参数设置为1以外的某个数字来做到这一点。如果你的窗口是基于计数的,那么这可能没问题,但是如果基于时间,你将获得相同时间间隔的多个窗口(每个螺栓一个)。
如果你想要平行窗口上完成的工作,你可以有一个窗口螺栓来创建窗口,但没有其他工作,然后让它在创建实际工作的螺栓之间分配创建的窗口。
EG
setBolt("window", new YourWindowedBolt().withWindow(...))
.shuffleGrouping("your-spout");
setBolt("work", new YourProcessWindowBolt(), 5)
.setTasks(5)
.shuffleGrouping("window");
然后你的窗口螺栓执行就像是
execute(TupleWindow window) {
//Emit the entire window as one tuple to next bolt
List<Tuple> tuples = window.get();
Values values = new Values(new ArrayList<Tuple>(tuples));
collector.emit(tuples, values);
}