如何连接两个流并在Flink中进行操作?

时间:2020-02-28 10:42:55

标签: java stream apache-flink flink-streaming

我有一个DataStream<Tuple2<String, Double>> oneDataStream<Tuple2<String, Double>> second,其中第一个具有更多来自另一个的元素,并且它们具有不同的键。而且,数据流“两个”基本上具有一个键值对。因此,我想连接这些流,以便将第一个数据流的值与第二个数据流的常量值相除。如何在Apache Flink中完成此操作?这是通过连接的数据流完成的还是另一种方式?

1 个答案:

答案 0 :(得分:1)

在描述的情况下,最好的主意是简单地使用广播状态模式。元素较少的第二个流将成为广播流,元素较多的第一个流将被第二个元素丰富。 因此,您将遇到类似这样的情况:

//define broadcast state here

firstStream.keyBy([someKey])
.connect(secondStream.broadcast([mapStateDescriptor])
.process([YourProcessFunction])

然后在过程元素的过程函数中,您可以进行扩充以生成预期的元组。

有关广播模式的更多信息,请参见:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/broadcast_state.html