我有一个资源,经常添加/更新的行称为Orders,以及一个名为UserProfile的资源,其频率较低(但通常很重要)。我想对这两个资源执行连续连接查询(当前逻辑上存储为Flink中的动态表),这样当发生UserProfile更新时,连接表会发出一个DataStream,其中每个订单更新一个EnrichedOrder与该UserProfile相关联< / strong>即可。目标是索引这个丰富的非规范化数据,以便在下游数据接收器中进行有效查询。
我的问题是,构建此联接的最佳方法是什么?具体来说,我如何确保所有订单记录在&#34;很多&#34;当更新UserProfile时,加入的一边是丰富的,同时仍保持高性能?
由于在Flink中无法进行任何没有时间窗口的内部连接(可能是出于性能原因),我想也不鼓励设置一个过大的时间窗口。
此用例的推荐方法是什么?
答案 0 :(得分:2)
在Flink 1.4.0中,SQL不支持没有时间边界的流上的内部连接,并且DataStream API不提供良好的语法。但是,可以hand-craft such a join使用CoProcessFunction
。
Flink 1.5.0将支持SQL中的无界流连接。默认情况下,两个输入表都将完全保持状态。但是,可以配置状态保留时间,之后清除非活动密钥的状态(非活动=在配置的间隔内未更新)。
由于SQL支持是在DataStream API之上实现的,因此您可以查看implementation of the unbounded SQL join。