我正在阅读这里的 flink 示例 https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/stream/state/state.html , 也搞不清楚synchronized block 存在的意义。
我在 google 上搜索了很多但找不到有用的答案,从 flink 的文档中,对于每个并行度都会有一个状态实例,并且在 CounterSource< 的一个实例中还有 run 方法/strong> 不会被不同的线程调用,所以下面的代码有什么意义
val lock = ctx.getCheckpointLock
while (isRunning) {
// output and state update are atomic
lock.synchronized({
ctx.collect(offset)
offset += 1
})
}
最佳答案
检查点发生在另一个线程中。此锁的目的是防止源在检查点拍摄状态快照时修改其状态。
关于apache-flink - 为什么flink中的stateful source需要同步锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391309/