学习了Exaxtly Once语义在Flink中的实现,首先对数据流和动态表进行简单分析,然后对发生故障Flink对数据的处理进行分析,最后分析了端到端Exactly-Once的实现。
SQL处理的表示有界的,流处理流是一个无限元组序列。动态表指的是与表示批处理数据的静态表不同,动态表是随着时间而变化的。连续查询指的是查询从不终止,并且查询的结果会不断的更新。在任何时候连续查询的结果在语义上以批处理模式在输入表快照上执行到相同查询结果相同。
制作快照的时间点,需要等待所有处理逻辑消费完成source保留状态之前的数据。一个简单的快照制作算法,首先要暂停处理输入的数据,然后等待后续所有算子消费当前已经输入的数据。带处理完后作业所有算子复制自己的状态,并保存到远端可靠存储,最后恢复对数据的处理。Checkpoint对作业性能的影响,首先结了快照制作和处理数据的过程,各个算子制作完成。状态快找后就可以正常处理数据,不用等下游算子制作完成快照,快照保存到远端也有可能非常耗时。
两阶段提交协议指的是在多个节点参与执行的分布式中,为了协调,每个节点都能同时执行或者回滚某个事物的操作引入了一个中间节点来统一处理所有节点的执行逻辑,这个节点叫做协作者,被中间节点调度的其他业务节点叫做参与者。在预期交阶段,写作者向所有参与者发送一个消息,每个参与的协作者收到消息后执行事务,但是不会真正的提交,若人物执行完成发送一个成功的消息,执行失败则发送一个失败的消息。在整个提交阶段,若协作者成功接收到所有的参与者发送回来的成功消息。