Apache flink Apache Flink:使用filter()或split()拆分流?

Apache flink Apache Flink:使用filter()或split()拆分流?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我有一个来自Kafka的数据流,对于MyModel中的一个字段,它有2个可能的值。MyModel是一个pojo,具有从Kafka的消息解析的特定于域的字段 DataStream<MyModel> stream = env.addSource(myKafkaConsumer); DataStream-stream=env.addSource(myKafkaConsumer); 我想分别在每个键a1、a2上应用窗口和运算符。什么是分离它们的好方法?我有两个选择过滤器和选择在脑海中,但

我有一个来自Kafka的数据流,对于MyModel中的一个字段,它有2个可能的值。MyModel是一个pojo,具有从Kafka的消息解析的特定于域的字段

DataStream<MyModel> stream = env.addSource(myKafkaConsumer);
DataStream-stream=env.addSource(myKafkaConsumer);
我想分别在每个键a1、a2上应用窗口和运算符。什么是分离它们的好方法?我有两个选择过滤器和选择在脑海中,但不知道哪一个更快

过滤方法

stream
        .filter(<MyModel.a == a1>)
        .keyBy()
        .window()
        .apply()
        .addSink()

stream
        .filter(<MyModel.a == a2>)
        .keyBy()
        .window()
        .apply()
        .addSink()
SplitStream<MyModel> split = stream.split(…)
    split
        .select(<MyModel.a == a1>)
        …
        .addSink()

    split
        .select<MyModel.a == a2>()
        …
        .addSink()
流
.filter()
.keyBy()
.window()
.apply()
.addSink()
流动
.filter()
.keyBy()
.window()
.apply()
.addSink()
拆分并选择方法

stream
        .filter(<MyModel.a == a1>)
        .keyBy()
        .window()
        .apply()
        .addSink()

stream
        .filter(<MyModel.a == a2>)
        .keyBy()
        .window()
        .apply()
        .addSink()
SplitStream<MyModel> split = stream.split(…)
    split
        .select(<MyModel.a == a1>)
        …
        .addSink()

    split
        .select<MyModel.a == a2>()
        …
        .addSink()
SplitStream split=stream.split(…)
分裂
.选择()
…
.addSink()
分裂
.选择()
…
.addSink()

如果split和select更好,如果我想根据MyModel中字段的值进行拆分,如何实现它们?

这两种方法的行为几乎相同。在内部,
split()
操作符分叉流并应用过滤器


还有第三种选择。边输出可能有一些好处,例如不同的输出数据类型。此外,对于侧输出,只对过滤条件进行一次评估。

中的s和方法不推荐使用,因为。不再建议使用它。

我建议不要使用
split
。也许我做错了什么,但在我当前的项目中,
env.execute()
在使用拆分时抛出奇怪的异常。然后我用
filter
替换了
split
,它解决了我的问题。那么应该用什么来代替呢?我想根据字段值“分割”我的流,这将导致我有两个不同的流,我以后可以用不同的方式处理。@Kristoff您可以使用上面演示的
过滤器
转换。在不同条件下(例如>0,