Flink 中如何连接两个流并进行操作?
How to connect two streams and operate them in Flink?
我有一个 DataStream<Tuple2<String, Double>> one
和 DataStream<Tuple2<String, Double>> second
,其中第一个有更多来自另一个的元素,并且它们有不同的键。此外,Datastream "two" 基本上只有一个键值对。所以,我想连接这些流,以便将第一个数据流的值与第二个数据流的常量值相除。这在 Apache Flink 中如何完成?这是通过连接的数据流完成的还是另一种方式?
在所描述的情况下,最好的办法是简单地使用广播状态模式。元素较少的第二个流将成为广播流,元素较多的第一个流将被第二个元素丰富。
所以,你会有这样的东西:
//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
我有一个 DataStream<Tuple2<String, Double>> one
和 DataStream<Tuple2<String, Double>> second
,其中第一个有更多来自另一个的元素,并且它们有不同的键。此外,Datastream "two" 基本上只有一个键值对。所以,我想连接这些流,以便将第一个数据流的值与第二个数据流的常量值相除。这在 Apache Flink 中如何完成?这是通过连接的数据流完成的还是另一种方式?
在所描述的情况下,最好的办法是简单地使用广播状态模式。元素较少的第二个流将成为广播流,元素较多的第一个流将被第二个元素丰富。 所以,你会有这样的东西:
//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