致力于使用 Flink 的新项目,并试图理解一些对象决策。
因此,在RichFlatMapFunction中,有一个哈希图是一个实例变量。每次输入平面图时,哈希图都会立即清除,然后使用。我知道 flink 将平面地图函数分开在不同的线程上,但以这种方式访问哈希图是否有任何风险?此外,此哈希映射是否应该是瞬态的,以便仅本地化为该线程?
此外,稍后在平面图中创建了迭代器的局部变量。那么有没有比每次初始化这些对象然后等待垃圾回收器清理它们更好的方法呢?
我认为这个问题可能更像是一个分布式系统问题,但任何信息或阅读链接将不胜感激。
不存在 Flink 同时调用 RichFlatMapFunction.flatMap()
方法的风险,因此您无需担心创建线程局部变量。
通常你会声明一个类私有瞬态映射
关于您正在创建的每次调用迭代器的GCing - 用我认识的最好的程序员之一(Bill Atkinson)的话来说,“测量,然后优化”:)如果您的工作流程运行速度比您需要的慢,那么是时候挖掘一些性能测量工具了,但我敢打赌,您的迭代器不会因 GC 活动而导致的任何缓慢。