Я создал окно в Apache BEAM, чтобы дождаться окончания срока действия окна или переполнения окна (сообщения не ограничены и приходят из очереди pub / sub):
.apply("Window", Window.<TraceUpdateMessage>into(new GlobalWindows())
.withTimestampCombiner(TimestampCombiner.EARLIEST)
.triggering(Repeatedly.forever(
AfterFirst.of(
AfterProcessingTime
.pastFirstElementInPane()
.plusDelayOf(Duration.standardMinutes(options.getFixedWindowDuration())),
AfterPane
.elementCountAtLeast(options.getFixedWindowElementCountTrigger())
)
))
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes()
)
У меня есть ParDo сразу после окна:
.apply("Aggregate", ParDo.of(
new CustomAggregationFunction()
)
проблема в том, что CustomAggregationFunction
вызывается сразу, и не похоже, что окно что-то делает. Цель go - вызывать CustomAggregationFunction
только тогда, когда окно заполнено, и обрабатывать все элементы внутри этого окна.