1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 带着问题去看源码 1.窗口的原有触发定义是什么样的? 2.怎么去自定义一个触发器?
针对问题1涉及的类,这里只看EventTime StreamExecGroupWindowAggregate.createWindowOperator 根据不同窗口类型,构建WindowOperator WindowOperatorBuilder.withEventTime 分配(assigner)窗口大小,并指定触发规则(trigger) EventTimeTriggers.afterEndOfWindow 在窗口结束时间触发窗口计算 这里可以补充下Tumble窗口的窗口边界计算逻辑 start = timestamp - (timestamp - offset + size) % size end = start + size timestamp 时间字段的值 offset 定义的偏移量 size 窗口定义大小 这是没有任何配置的情况下,如果有配置,可以查看下WindowEmitStrategy.getTrigger 里面详细的定义了不同的表参数下,定义的触发器策略 延迟触发,提前触发等
针对问题2,其实看到这里,基本上也会有一个模糊的思路 将原有的触发策略,根据窗口传参的个数,做一个switch 指定不同触发策略 具体的实现后面有时间可以尝试实现一下
|