gpt4 book ai didi

apache-flink - Apache Flink : Using filter() or split() to split a stream?

转载 作者:行者123 更新时间:2023-12-03 21:21:27 25 4
gpt4 key购买 nike

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

DataStream<MyModel> 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<MyModel> split = stream.split(…)
split
.select(<MyModel.a == a1>)

.addSink()

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

.addSink()

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

最佳答案

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

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

关于apache-flink - Apache Flink : Using filter() or split() to split a stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53588554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com