Итак, я пытаюсь выяснить поведение переменных состояния c в Beam DoFn, распределяется ли оно между потоками (внутри одной и той же JVM)?
В основном пытаюсь понять следующее из Руководство по программированию:
4.3.2. Совместимость с потоками
… Обратите внимание, что члены stati c в вашем функциональном объекте не передаются рабочим экземплярам и что несколько экземпляров вашей функции могут быть доступны из разных потоков.
https://beam.apache.org/documentation/programming-guide/#requirements -for-write-user-code-for-beam-transforms
Похоже, что следующий «счетчик» объекта stati c был инициализирован, сериализован и применен в worker (Flink engine), соответствует ли он приведенному выше выражению?
Если рабочие потоки попадают в разные процессы / 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();
}
}
спасибо