伙计们,我应该通过一些通用键将一些庞大的SQL表与某些REST服务的json连接起来(我们正在谈论带有几个REST服务调用的多个sql表)。关键是这些数据不是实时/无限流,也不认为我可以通过join列对REST服务的输出进行排序。现在,愚蠢的方法是先带上所有数据,然后匹配行,但这意味着将所有内容存储在内存/一些存储中,例如Cassandra或Redis。
但是,我想知道flink是否可以使用流窗口之王来连接说X元素(所以实际上只是将这些元素存储在RAM中的某个点),而且还存储不匹配的元素以供以后在某种哈希映射中使用。这就是我所说的智能联接。
国王的问候
最佳答案
细节在于魔鬼,但是的,原则上,使用Flink可以实现这种数据丰富。您的要求尚不完全清楚,但我可以提供一些指示。
首先,您需要熟悉Flink的managed state接口。使用这些接口将确保您的应用程序是容错的,可升级的,可伸缩的等。
如果只想预加载一些数据,则可以使用RichFlatmap
并将数据加载到open()方法中。在您的情况下,CoProcessFunction
可能更合适。这是一个流传输运算符,具有两个输入,这些输入可以保留状态并且还可以访问计时器(可用于终止不再需要的状态,并在等待无序数据到达后发出结果)。
Flink还支持asynchronous i/o,这可以使使用外部服务的效率更高。
还可以考虑通过将REST服务调用包装为SQL and Table APIs来使用Flink的更高版本user-defined functions来解决此问题。