Hello,
I'm struggling to understand the following behaviour of the
`WindowOperator` and would appreciate some insight from experts:
In particular I'm thinking about the following hypothetical data flow:
input.keyBy(..)
.window(TumblingEventTimeWindows.of(..))
.apply(..)
...
.keyBy(..)
.window(CustomWindowAssignerUsingATriggerBasedOnTheElementsStamp)
.apply(..)
When the first window operator fires a window based on the timer, the
emitted elements are assigned a timestamp which equals
`window.maxTimestamp()`. This stamp is then available in the second
window operator's trigger through the `onElement` method. So far so good.
However, when using `ContinuousEventTimeTrigger` (simply put when firing
the window multiple times at different times in its lifecycle) in the
first window operator, _all_ of the elements of this window - no matter
whether fired as a partial or the final window result - will arrive with
the same stamp in the (downstream) operators.
This make it practically impossible to use again
`ContinuousEventTimeTrigger` (or similar) in the second window operator
to achieve "early firing" again.
This is surprising. I would expect the elements to be assigned the stamp
of the timer which fired them (which will be window#maxTimestamp() for
`TumblingEventTimeWindows`). Is there any particular reason for the
unconditional assignment to `window.maxTimestamp()`?
Many thanks in advance,
P.