Apache flink Flink:在CoFlatMapFunction中共享状态
使用Apache flink Flink:在CoFlatMapFunction中共享状态,apache-flink,flink-streaming,Apache Flink,Flink Streaming,使用CoFlatMapFunction时有点卡住了。如果我把它放在DataStreambefore窗口上,它似乎可以正常工作,但如果放在窗口的“apply”函数之后,它就会失败 我在测试两个流,在flatMap1上的主要“功能”不断摄取数据,在flatMap2上的控制流“模型”根据请求更改模型 我能够在flatMap2中正确设置并查看b0/b1,但是flatMap1始终可以看到b0和b1在初始化时设置为0 我是不是漏掉了什么明显的东西 public静态类applyModel实现coflatmap
CoFlatMapFunction
时有点卡住了。如果我把它放在DataStream
before窗口上,它似乎可以正常工作,但如果放在窗口的“apply”函数之后,它就会失败
我在测试两个流,在flatMap1
上的主要“功能”不断摄取数据,在flatMap2
上的控制流“模型”根据请求更改模型
我能够在flatMap2
中正确设置并查看b0/b1,但是flatMap1
始终可以看到b0和b1在初始化时设置为0
我是不是漏掉了什么明显的东西
public静态类applyModel实现coflatmap函数{
私有静态最终长serialVersionUID=1L;
双b0;
双b1;
公共应用程序模型(){
b0=0.0;
b1=0.0;
}
@凌驾
公共void flatMap1(特征值,收集器输出){
系统输出打印(“主:“+this+”\n”);
}
@凌驾
公共void flatMap2(模型值,收集器输出){
System.out.print(“旧型号:“+this+”\n”);
b0=value.getB0();
b1=value.getB1();
System.out.print(“新型号:“+this+”\n”);
}
@凌驾
公共字符串toString(){
返回“CoFlatMapFunction:{b0:+b0+”,b1:+b1+”};
}
}
以下是邮件列表中的答案
CoFlatMapFunction是否打算并行执行
如果是,您需要某种方法来确定分配哪个记录
转到哪个并行实例。在某种程度上,coflatmap函数
模型和结果之间是否有并行(分区)连接
会话窗口,因此您需要某种形式的键来选择
将元素分区到。这有意义吗
如果不是,请尝试显式地将其设置为parallelism 1
你好,斯蒂芬
所有人都可以只读访问的全局状态可以通过 广播() 可供所有人读取和更新的全局状态为 目前不可用。在这方面保持一致的操作将是非常重要的 成本高昂,需要某种形式的分布式通信/共识 相反,我鼓励您采用以下方法: 1) 如果可以对状态进行分区,请使用keyBy().mapWithState()-即 本地化状态操作并使其非常快速 2) 如果您的状态不是按键组织的,那么您的状态可能非常复杂 很小,您可以使用非并行操作 3) 如果某个操作更新状态,而另一个操作访问该状态, 您通常可以通过迭代和CoFlatMapFunction来实现这一点 (一边是原始输入,另一边是反馈输入) 所有方法最终都将状态访问和修改本地化, 如果可能的话,这是一个很好的模式 你好,斯蒂芬
您在窗口中的应用功能中执行什么操作?也许您可以与我们共享相应的代码。for(原始值:values){if(value.getTs()>end_ts)end_ts=value.getTs();if(value.getTs()