Вы не можете совместно использовать окно для нескольких рабочих.
Если вы довольны наличием нескольких одновременных окон, вы можете просто увеличить количество исполнителей, использующих ваш оконный болт.Это можно сделать, установив для параметра parallellism_hint
значение setBolt
для некоторого числа, отличного от 1. Это может быть хорошо, если ваше окно основано на подсчете, но если оно основано на времени, вы получите несколько окон за один и тот же интервал времени (по одному наболт).
Если вы вместо этого хотите распараллелить работу над окном, у вас может быть оконный болт, который создает окно, но не выполняет никакой другой работы, и затем он распределяет созданные окна между болтами, которыевыполнить фактическую работу.
например
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);
}