我有一个来自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()
如果分割和选择更好,如果我想根据MyModel中的字段值进行分割,如何实现它们?
答案 0 :(得分:0)
两个方法的行为几乎相同。在内部,split()
运算符会分叉流并同时应用过滤器。
还有第三个选项Side Outputs 。侧面输出可能有一些好处,例如不同的输出数据类型。此外,仅对侧面输出评估一次过滤条件。
答案 1 :(得分:0)