我有一个经常添加/更新行的资源orders,还有一个资源userprofile,更新频率较低(但通常很重要)。我想对这两个资源(当前逻辑上存储为flink中的动态表)执行连续连接查询,以便在发生userprofile更新时,连接表发出一个数据流,其中每个与该userprofile关联的订单都有一个更新的enrichedorder。目的是索引这些丰富的非规范化数据,以便在下游数据接收器中进行高效查询。
我的问题是,构建这种连接的最佳方式是什么?具体来说,如何确保在更新userprofile时,join的“many”端上的所有订单记录都得到充实,同时仍然保持性能?
因为在flink中不可能使用没有时间窗口的任意内部连接(可能是出于性能原因),所以我认为不建议设置过大的时间窗口。
对于这个用例,推荐的方法是什么?
1条答案
按热度按时间wnrlj8wa1#
在flink1.4.0中,sql不支持没有时间边界的流上的内部连接,datastreamapi也不提供好的语法。但是,可以使用
CoProcessFunction
.Flink1.5.0将支持sql中的无限流连接。默认情况下,两个输入表都将完全处于状态。但是,可以配置一个状态保留时间,在该时间之后清除非活动密钥的状态(非活动=未在配置的间隔内更新)。
由于sql支持是在datastreamapi之上实现的,因此可以检查无边界sql连接的实现。