【发布时间】:2020-04-10 20:07:30
【问题描述】:
所以,我试图弄清楚 Beam DoFn 中静态变量的行为, 它是否在线程之间共享(在同一个 JVM 中)?
基本上试图从编程指南中理解以下内容:
4.3.2。线程兼容性
…请注意,函数对象中的静态成员不会传递给工作实例,并且多个 可以从不同的线程访问您的函数的实例。
现在看来,下面的静态对象“counter”在worker(Flink引擎)中被初始化、序列化和应用了,它是否与上面的语句一致?
如果工作线程属于不同的进程/JVM,显然不会被共享。但是如果掉到同一个 JVM 会不会共享“计数器”?
public class myTransform extends DoFn<KV<String >,String> implements Serializable {
private static AtomicLong counter = new AtomicLong(0);
...
@ProcessElement
public void processElement(ProcessContext c) {
...
counter.incrementAndGet();
}
}
谢谢
【问题讨论】: