我有一个单例类负责检索池化连接。我想知道从Flink子任务访问此单例类的对象的最佳方法是什么,因为在多线程环境中存在单例对象初始化的潜在问题。最好使用synchronized
关键字锁定单例类的初始化,还是有更好的方法在Flink运行时实例化单例对象?
答案 0 :(得分:1)
根本不使用Singleton模式和Flink,因为在不同的机器(不同的插槽)上计算了多个子任务。 因此,如果您希望使用所有计算机中的单个状态,则最好将此状态保留在数据库中并在数据库事务中对其进行修改。如果每个flink槽只需要一个单独的对象(即数据库连接等重型对象),你可以在RichFunction实现的open(...)方法中创建它