【发布时间】:2019-07-24 23:18:03
【问题描述】:
我有一个来自 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。也许我做错了什么,但在我当前的项目中env.execute()在使用拆分时抛出了奇怪的异常。然后我用filter替换了split,它解决了我的问题。
标签: apache-flink flink-streaming