Hi,
请问是否可以将所有代码贴出来,尤其是水位线相关的。因为事件时间的推进和水位线策略紧密相关。
假设这样一种情况,将时间戳作为事件时间,假设你的水位线容错间隔设置为10min,就会出现上述情况,原因如下:
1. 首先是时间窗口的对齐逻辑。窗口是根据 Epoch 时间(1970-01-01 00:00:00
UTC)来对齐的。例如,如果窗口大小为5分钟,那么窗口的开始时间会是00:00、00:05、00:10等等很整的值,而不是事件时间。这也是为什么你的第一条数据会落在
00:20 - 01:20 这个时间窗口上。
2. 对于事件时间窗口,触发窗口计算的时机是‘水位线大于窗口结束时间’
Hi,
基本思路和Jinsui说的差不多,我怀疑也是watermark没有推进导致窗口没有开窗。具体可以debug一下EventTimeTrigger里的‘onElement’方法和‘onEventTime’方法。
--
Best!
Xuyang
在 2024-01-02 23:31:54,"Jinsui Chen" 写道:
>Hi,
>
>请问是否可以将所有代码贴出来,尤其是水位线相关的。因为事件时间的推进和水位线策略紧密相关。
>
>假设这样一种情况,将时间戳作为事件时间,假设你的水位线容错间隔设置为10min,就会出现上述情况,原因如下:
>1.
atUtils.format(startTs, "-MM-dd
> HH:mm:ss.SSS");
>String windowEnd = DateFormatUtils.format(endTs, "yyyy-MM-dd
> HH:mm:ss.SSS");
>StringBuilder sb = new StringBuilder();
>sb.append("窗口["+windowStart+","+windowEnd);
>
里按照key分组,我输入的key都是同一个值,应该在同一个分区。
>watermark.keyBy(item -> item.itemid)
>我理解的就是处理环节其实就是单并行度的,没有问题。问题出在socket这种方式必须使用单并行度?
>发件人: haishui
>发送时间: 2024-01-03 13:35
>收件人: user-zh
>主题: Re:回复: Re: 滑动窗口按照处理时间触发的问题
>Hi,
>
>
>应该是并行度的原因,你可以先将并行度设置为1试试。
>
>
>