Apache flink 为什么flink中的有状态源需要同步锁

Apache flink 为什么flink中的有状态源需要同步锁,apache-flink,stateful,Apache Flink,Stateful,我正在阅读这里的flink示例,无法理解同步块的存在点 我在谷歌上搜索了很多,从flink的文档中找不到有用的答案,对于每个并行,都会有一个state实例,而且CounterSource的一个实例中的run方法不会从不同的线程调用,那么下面的代码有什么意义呢 val lock = ctx.getCheckpointLock while (isRunning) { // output and state update are atomic lock.synchronized({

我正在阅读这里的flink示例,无法理解同步块的存在点

我在谷歌上搜索了很多,从flink的文档中找不到有用的答案,对于每个并行,都会有一个state实例,而且CounterSource的一个实例中的run方法不会从不同的线程调用,那么下面的代码有什么意义呢

val lock = ctx.getCheckpointLock

while (isRunning) {
  // output and state update are atomic
  lock.synchronized({
    ctx.collect(offset)

    offset += 1
  })
}

检查点发生在另一个线程中。此锁的目的是防止源在检查点拍摄状态快照时修改其状态。

非常感谢,这意味着每次使用CheckpointedFunction接口时,都应考虑竞争条件