您的位置:首页 > 游戏 > 游戏 > 近的网站在线客服系统_建站模板 discuz_吉林网站推广公司_产品推广

近的网站在线客服系统_建站模板 discuz_吉林网站推广公司_产品推广

2024/10/5 17:26:10 来源:https://blog.csdn.net/qq_44741568/article/details/142364089  浏览:    关键词:近的网站在线客服系统_建站模板 discuz_吉林网站推广公司_产品推广
近的网站在线客服系统_建站模板 discuz_吉林网站推广公司_产品推广

客户反馈现象:
L.time between r.time - interval ‘1’ minute and r.time + intervel ‘1’ minute 实际上是2分钟匹配不上才下发
L.time between r.time - interval ‘1’ minute and r.time 实际上是1分钟30秒匹配不上才下发
L.time between r.time and r.time + intervel‘1’ minute 实际上是立刻下发
L.time between r.time - interval ‘2’ minute and r.time + intervel ‘2’ minute 实际上是4分钟匹配不上才下发

排查后的结论:配置的上下界是[a,b],那结果为 1.5a + 0.5b 时间之后匹配不上才下发

源码分析:由三个属性进行控制 分别是 左流时间,右流时间、 根据左右流时间得到的minCleanUpInterval,为0.5a+0.5b
this.leftRelativeSize = -leftLowerBound;   // 左流的时间 即a
this.rightRelativeSize = leftUpperBound;  // 右流的时间  即b
this.minCleanUpInterval =(this.leftRelativeSize + this.rightRelativeSize) / 2L;   // 最小的区间 为0.5a + 0.5b
this.allowedLateness  = 0;  // 默认为0
if (leftRow) {// 若是左流,则为 rowTime + a + this.minCleanUpInterval + 0 + 1L , 即为 1.5a + 0.5b + 1LcleanUpTime = rowTime + this.leftRelativeSize + this.minCleanUpInterval + this.allowedLateness + 1L;this.registerTimer(ctx, cleanUpTime);this.rightTimerState.update(cleanUpTime);
} else {// 若是右流,则为 rowTime + b + this.minCleanUpInterval + 0 + 1L , 即为 1.5b+ 0.5a + 1LcleanUpTime = rowTime + this.rightRelativeSize + this.minCleanUpInterval + this.allowedLateness + 1L;this.registerTimer(ctx, cleanUpTime);this.leftTimerState.update(cleanUpTime);
}

源码定位过程:
看到这个问题,立马能想到需要通过源码查找原因,flink join本质是对窗口的操作,窗口在flink底层是基于Timer定时器来实现的,只需在ctx.timerService().registerProcessingTimeTimer()方法处打断点进行debug,即可知道是从哪里进行注册,从而定位到上述的源码类:org.apache.flink.table.runtime.operators.join.interval.TimeIntervalJoin。
就这样,不到5分钟排查出了问题得到原因。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com