首页 > 解决方案 > 如何连接两个流并在 Flink 中进行操作?

问题描述

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

标签: javastreamapache-flinkflink-streaming

解决方案


在所描述的情况下,最好的想法是简单地使用广播状态模式。具有少量元素的第二个流将成为广播流,而具有更多元素的第一个流将使用第二个元素的元素进行丰富。所以,你会有类似的东西:

//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


推荐阅读