flink中的java局部变量

kupeojn6  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(452)

在使用flink的新项目中工作,并试图理解一些对象决策。
所以在richflatmapfunction中,有一个hashmap是一个示例变量。每次输入flatmap时,都会立即清除hashmap,然后使用它。我知道flink在不同的线程上分离flatmap函数,但是这样访问hashmap有风险吗?这个hashmap是否应该是暂时的,这样它就只局限于那个线程了?
此外,稍后在flatmap中还创建了迭代器的局部变量。那么,有没有比每次初始化这些对象然后等待垃圾收集器清理它们更好的方法呢?
我认为这个问题可能更像是一个分布式系统的问题,但任何信息或阅读链接都将非常感谢。

zfycwa2u

zfycwa2u1#

Flink不会同时给你打电话的 RichFlatMapFunction.flatMap() 方法,所以您不必担心创建线程局部变量。
通常你会声明一个类 private transient Map<blah, blah> myVariable ,然后在 RichFlatMapFunction.open() 打电话。
关于你正在创建的每次调用迭代器的gcing——用我所知道的最好的程序员之一(bill atkinson)的话来说,“测量,然后优化”:)如果你的工作流运行速度比你需要的慢,那么是时候挖掘一些性能测量工具了,但是我敢打赌gc活动对迭代器造成的任何慢。

相关问题