本文主要是介绍interval join实现解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
interval join实现解析
- 概览
- 怎么管理左右缓存
interval join的实现主要依靠IntervalJoinOperator,下面详细分析IntervalJoinOperator代码
概览
IntervalJoinOperator可以通过使用可配置的下界和上界,精确地发出(T1, T2)其中T2.ts∈(T1.ts +下界,T1.ts + upperBound]。下界和上界都可以配置为包含或排他。
元素一旦连接起来,就会传递给用户定义的ProcessJoinFunction。
这个实现的基本思想如下:每当我们在processElement1(StreamRecord)(也就是左边)接收到一个元素时,我们将它添加到左边缓冲区。然后检查右侧的缓冲区,看看是否有可以连接的元素。如果有,则将它们连接并传递给上述函数。当接收到右边的元素时,同样的情况也会发生。
发送的这一对元素的时间戳=max(左侧元素时间戳,右侧元素时间戳)。
为了避免元素缓冲区无限增长,我们为每个元素注册一个清理计时器。这个计时器指示什么时候一个元素不再被join并且可以从状态中删除。
怎么管理左右缓存
管理缓存的逻辑在IntervalJoinOperator.processElement方法中,每来一个元素,都会调用internalTimerService.registerEventTimeTimer方法为该元素注册一个cleanupTime,代码如下
private <THIS
这篇关于interval join实现解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!