3

我有一个经常添加/更新行的资源,称为 Orders,还有一个名为 UserProfile 的资源,更新频率较低(但通常很重要)。我想对这两个资源(当前逻辑上存储为 Flink 中的动态表)执行连续连接查询,这样当 UserProfile 更新发生时,连接表会发出一个 DataStream,其中每个与该 UserProfile 关联的订单都有一个更新的 EnrichedOrder。目标是索引这些丰富的非规范化数据,以便在下游数据接收器中进行有效查询。

我的问题是,构建此连接的最佳方式是什么?具体来说,如何确保在更新 UserProfile 时丰富联接“多”端的所有订单记录,同时仍保持性能?

由于在 Flink 中不可能进行没有时间窗口的任意内部连接(可能是出于性能原因),我想也不鼓励设置过大的时间窗口。

此用例的推荐方法是什么?

4

1 回答 1

2

在 Flink 1.4.0 中,SQL 不支持对没有时间限制的流进行内部连接,DataStream API 也没有提供很好的语法。但是,可以使用CoProcessFunction.

Flink 1.5.0 将支持 SQL 中的无界流连接。默认情况下,两个输入表都将完全保持状态。但是,可以配置状态保留时间,在此时间之后,非活动键的状态(非活动 = 未在配置的时间间隔内更新)被清除。

由于 SQL 支持是在 DataStream API 之上实现的,因此您可以检查无界 SQL 连接的实现

于 2018-02-05T11:59:03.347 回答