迭代Apache Flink中的多个流

时间:2018-02-12 18:25:11

标签: apache-flink flink-streaming

关于在Apache Flink中迭代多个流的问题。

我是Flink初学者,我目前正在尝试在Flink上执行递归查询(例如,数据记录)。

例如,查询计算每5分钟(翻滚窗口)的传递闭包。如果我有一个输入流inputStream(由初始边缘信息组成),另一个outputStream(传递闭包)由inputStream初始化。我想通过加入inputStream来迭代地丰富outputStream。对于每次迭代,反馈应该是outputStream,并且迭代将持续到不再可以在outputStream上附加边缘。我的传递闭包的计算应该每5分钟定期触发一次。在迭代期间,inputStream应该“保持”并为我的outputStream提供数据。

是否可以在Flink中执行此操作?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这听起来像是一个侧面输入问题,您希望将“inputStream”视为已连接到其他“outputStream”的批处理数据集(带有刷新)。不幸的是,Flink目前没有提供一种简单的方法(参见https://stackoverflow.com/a/48701829/231762

如果这两个流都来自数据源,那么一种方法是创建一个控制记录顺序的包装器源。它必须发出类似于Tuple2的东西,其中一侧或另一侧为null,然后在下游(自定义)函数中,您基本上将它们拆分,并进行连接。

如果可能,那么这个源可以阻止“输出”元组,同时它发出“输入”元组,加上其他逻辑听起来你需要(5分钟刷新等)。有关执行此操作的框架代码,请参阅上面对上述其他SO问题的回复。