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

时间:2019-08-07 09:36:52

标签: apache-flink stateful

我正在这里https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/stream/state/state.html阅读flink示例,并且无法弄清楚同步块的存在点。

我已经在flink的文档中进行了大量搜索,但找不到有用的答案,对于每个并行度,都会有一个状态实例,并且在 CounterSource <的一个实例中还有一个 run 方法。 / strong>不会从不同的线程调用,所以下面的代码有什么意义

val lock = ctx.getCheckpointLock

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

    offset += 1
  })
}

1 个答案:

答案 0 :(得分:1)

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