你好,范瑞 Barrier alignment 这里并不会涉及 output/input queue,pending 的只是用于 alignment 的一小部分数据。
如果想了解 checkpoint 的原理,建议阅读文档中引用的两篇论文。[1] [2] 如果想了解 Flink 的具体实现,这里的文档是 internal 部分的,可能需要阅读一下相关代码了。[3] [4] 1. https://arxiv.org/abs/1506.08603 2. https://www.microsoft.com/en-us/research/publication/distributed-snapshots-determining-global-states-distributed-system/?from=https%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fchandy.pdf 3. https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/runtime/io/CheckpointBarrierAligner.java 4. https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/runtime/io/CheckpointedInputGate.java Thanks, Biao /'bɪ.aʊ/ On Wed, Aug 7, 2019 at 2:11 PM ❄ <[email protected]> wrote: > Hi,老师: > 老师,你好flink官网这个页面( > https://ci.apache.org/projects/flink/flink-docs-release-1.8/internals/stream_checkpointing.htm)介绍barrier对齐的这里第三步 > • Once the last stream has received barrier n, the operator emits all > pending outgoing records, and then emits snapshot n barriers itself. > > 这句话,说的是一旦接受到上游所有流的barrier n,这个Operator实例会发送所有 pending的输出记录,然后发送 > 把自己的barrier n发出去到下游。这里的pending的输出记录是指什么数据?是指barrier之前的那些还在Output > Queue中的数据吗?不是barrier之后的数据吧,因为精准一次语义的话,snapshot之前,barrier之后的数据应该还没开始处理,等同步快照结束后才能开始处理。如果这里指的是barrier之前那些还在Output > Queue中的数据,那么也不能马上把这些数据发出去吧,应该还要考虑下游的Input Queue中有足够空间 > > > > 望解答,谢谢老师! > > 范瑞
