"我想在一个运算符中接收和处理三个流。例如,Storm中实现的代码如下:
builder.setBolt(“C_bolt”,C_bolt(),parallelism_hint)
.fieldsGrouping(“A_bolt”,“TRAINING”,新字段(“word”))
.fieldsGrouping(“B_bolt”,“ANALYSIS”,新字段(“word”))
.allGrouping(“A_bolt”,“SUM”);
在Flink中,实现了SUM流(A_bolt的SideOutput)和TRAINING流(A_bolt)的处理:
SingleOutputStreamOperator > A_bolt;
DataStream > Sum = A_bolt.getSideOutput(outputTag).broadcast();
DataStream > B_bolt;
DataStream C_bolt = A_bolt
.keyBy(new KeySelector <Tuple3 <String,Integer,Boolean>,String>(){
@覆盖
public String getKey(Tuple3 <String,Integer,Boolean> in)抛出异常{
return in.f0;
}
})
.connect(SUM)
.flatMap(new Process())
.setParallelism(平行度);
但我不知道如何添加ANALYSIS流(B_bolt)。"
"Flink仅支持单输入和双输入流操作符。你的选择是:
使用union()创建一个合并流,其中包含来自所有三个流的所有元素(这些流必须具有相同的类型,尽管您可以使用Either来协助这一点)。
在使用coFlatMap组合两个流之后,将该初步结果连接到第三个流,使用另一个coFlatMap(或coProcessFunction)来完成处理。
或者,在你情况下,这两种技术的组合可能更为可取"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。