我正在研究一个简单的案例,我们将Stream 1(位置)与Stream 2(价格)结合在一起,并将最新的Position数据与price数据链接起来。 为此,我扩展了RichCoFlatMapFunction,它构建了一个包装器对象,该对象从任一流中收集数据。 在此过程中,它还将数据存储在其MapState中。
一天结束时,我需要根据其他流数据(例如,日期更改流)清除状态。 我怎样才能做到这一点? 基本上我需要清除priceState和positionState。我不确定是否可以获取广播流来做到这一点?
下面是用于加入2个流的示例代码
x is not a function
答案 0 :(得分:0)
如果Flink提供了三输入运算符,那么您想做的事情就很简单了,但事实并非如此。 Flink仅支持具有一个或两个输入的运算符。
一个选项可能是将您的RichCoFlatMap转换为CoProcessFunction,并使用计时器触发状态清除。或依靠StateTTL机制清除状态。
如果您确实需要显式触发状态清算,您可以做的是使用union()将价格和头寸流合并到DataStream<Either<Price, Position>>
中(或先将两个流都映射到某个统一类型),然后然后将该流连接到具有启动状态清除信号的广播流。或者,如果所有三个流都将以相同的方式进行键控,则可以将它们结合在一起。