多过滤器在并行Flink数据流中的应用

iqxoj9l9  于 2023-03-11  发布在  Apache
关注(0)|答案(2)|浏览(171)

我想运行一个Flink Streaming应用程序,它可以类似于一次读取多次写入。基本上,我想从一个消防水管读取数据,对从源读取的到达记录并行应用不同的过滤器,并根据配置将它们发送到不同的接收器。
这怎么可能在Flink中做到呢?我认为在KafkaStreams中有一个概念,你可以做到这一点。下面是我希望我的Flink DAG看起来像什么的一个插图:

zzzyeukh

zzzyeukh1#

实现这一点的最简单方法是使用filter()转换,如下所示:

DataStream<X> stream = ...;

// Filter 1
stream
    .filter { x -> x.property == 1 }
    .sinkTo(sink1)

// Filter 2
stream
    .filter { x -> x.property == 2 }
    .sinkTo(sink2)

// Repeat ad nauseum

或者,您可以考虑使用Side Outputs,这样您就只需要一个“filter”函数,该函数可以将每个过滤后的流分离为单独的输出,然后您可以对这些输出进行操作。
如果您确实需要 n 个不同的流,则可能必须查看要写入的接收器的类型,并考虑在该级别处理筛选

liwlm1x9

liwlm1x92#

如果你有很多数据流,那么你肯定希望使用一个带有副输出的ProcessFunction,就像Rion上面提到的那样,否则你会把数据流复制N次,效率非常低。

相关问题