Apache Flink:使用filter()或split()来分割流?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Apache Flink:使用filter()或split()来分割流?

flink小助手 2018-12-13 14:20:47 4311

我有一个来自Kafka的DataStream,它对MyModel中的一个字段有两个可能的值。MyModel是一个pojo,其中包含来自Kafka的消息解析的特定于域的字段。

DataStream stream = env.addSource(myKafkaConsumer);
我想分别在每个键a1,a2上应用窗口和运算符。将它们分开的好方法是什么?我有2个选项过滤器并选择,但不知道哪个更快。

过滤方式

stream

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

stream

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

拆分并选择方法

SplitStream split = stream.split(…)

split
    .select(<MyModel.a == a1>)
    …
    .addSink()

split
    .select<MyModel.a == a2>()
    …
    .addSink()

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

消息中间件 Kafka Apache 流计算
分享到
取消 提交回答
全部回答(1)
  • flink小助手
    2019-07-17 23:20:38

    两种方法的表现几乎相同。在内部,split()操作员也会分叉流并应用过滤器。

    第三个选项是Side Outputs。侧输出可能有一些好处,例如不同的输出数据类型。此外,过滤条件仅对侧输出进行一次评估。

    0 0
微服务
使用钉钉扫一扫加入圈子
+ 订阅

构建可靠、高效、易扩展的技术基石

推荐文章
相似问题