Flink中的局部变量

问题描述 投票:0回答:1

正在研究使用Flink的新项目,并试图了解一些对象决策。

因此,在RichFlatMapFunction中,存在一个哈希图,它是一个实例变量。每次输入平面图,哈希图将立即清除然后使用。我了解flink在不同的线程上分离了平面图函数,但是以这种方式访问​​哈希图有任何风险吗?还应该以这种方式将哈希表本地化为仅该线程吗?

此外,在平面图中,还会创建Iterator的局部变量。因此,有没有比每次都初始化这些对象然后仅等待垃圾收集器清理它们更好的方法?

我认为这个问题可能更多是分布式系统的问题,但是任何有关阅读的信息或链接将不胜感激。

java apache-flink distributed-computing
1个回答
0
投票

没有Flink同时调用您的RichFlatMapFunction.flatMap()方法的风险,因此您不必担心创建线程局部变量。

通常,您将声明一个类private transient Map<blah, blah> myVariable,然后在您的RichFlatMapFunction.open()调用中对其进行初始化。

关于您正在创建的每次调用迭代器的GC-用我认识的最好的程序员之一(比尔·阿特金森(Bill Atkinson)的话,“先测量,然后优化” :)。)现在是时候挖掘出一些性能评估工具了,但我敢打赌,迭代器的GC活动可能会导致速度缓慢。

© www.soinside.com 2019 - 2024. All rights reserved.