flink DataStream算子中如何实时更新变量?

1.问题描述,以下图:图片.png
在写机器学习算法时遇到这样一个场景,在第一个map须要用到变量currentCenter,而后我输出的结果须要更新currentCenter(最后一个map),可是没办法更新。由于map函数是并行的,传入的currentCenter其实是一个复制品,在map中修改currentCenter复制品是不会改变原变量的。
2.方案(1)数据库/文件系统
使用外部数据库/文件系统,在第一个map函数不断的读取外部数据库/文件系统数据,第二个map函数中不断更新外部数据库/文件数据,能够达到实时动态更新变量的效果。但这样的缺点就是频繁的io开销,至关于将flink退化成了mapreduce的计算模型。pass
3.方案(2)迭代流+广播流
这里有个很明显的特征,就是我须要在下游的流中更新到上游的流数据,这不就是迭代流吗?
不熟悉迭代流的能够查一下官网或看一下个人示例:
https://segmentfault.com/a/11...
方向已经明确了,我须要对个人实时变量进行迭代流操做。还有一个问题就是个人实时变量是经过输入流的数据和实时变量计算获得的,因此这里就须要把个人迭代流广播到输入流计算,而后生成新的实时变量流继续迭代,大体的流程图以下:
图片.png
成功解决!还有在迭代流中还能够使用windows操做。
4.方案(3)使用Flink的DataStreamUtils。实验未成功,成功的大佬分享一下!
欢迎查看相关入门博客:https://segmentfault.com/a/11...算法