【问题标题】:How to connect two streams and operate them in Flink?如何连接两个流并在 Flink 中进行操作?
【发布时间】:2020-02-28 10:42:55
【问题描述】:

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

【问题讨论】:

  • 数据流“二”基本上是一个键值对,你的意思是这基本上是一个元素流吗?
  • 是的,完全正确。例如,第二个数据流只是键值对,("gamma", 1.23)。
  • 好的,连接的假设是什么?您只是想用来自另一个流的元素来丰富一个流的元素吗?
  • 是的,因为我想在新连接流的第二个和第四个元组之间操作一个偏差。我想在连接之后我有一个 Tuple4。对吗?

标签: java stream apache-flink flink-streaming


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多