我有一个singleton类,负责检索池连接。我想知道从flink子任务访问这个单例类的对象的最佳方式是什么,因为在多线程环境中存在单例对象初始化的潜在问题。最好使用 synchronized 关键字或是否有更好的方法在flink运行时示例化singleton对象?
synchronized
k3fezbri1#
在flink中使用单例模式是个坏主意,因为多个子任务是在不同的机器(不同的插槽)上计算的。因此,如果您想使用所有机器的单一状态,最好将此状态保存在数据库中,并在数据库事务中修改它。如果每个flink插槽只需要一个单例对象(即像数据库连接这样的重对象),那么可以在richfunction实现的open(…)方法中创建它
1条答案
按热度按时间k3fezbri1#
在flink中使用单例模式是个坏主意,因为多个子任务是在不同的机器(不同的插槽)上计算的。因此,如果您想使用所有机器的单一状态,最好将此状态保存在数据库中,并在数据库事务中修改它。如果每个flink插槽只需要一个单例对象(即像数据库连接这样的重对象),那么可以在richfunction实现的open(…)方法中创建它