-- At most Onece:最多一次,若是算子处理事件失败,事件将再也不尝试该事件。
-- At Least Onece:至少一次,若是算子处理事件失败,算子会再次尝试该处理事件,直到有一次成功。后端
-- 1.分布式快照+状态检查点,思想就是对比检查点和分布式快照中的状态,如出现状态不一致就回退到最小状态处,从新计算。
-- 2.At least Onece + 去重,重播失败的算子,并删除重复算子的结果。
-- 虽然从理论上看,分布式快照,和至少一次事件交付外加去重,这两种机制之间存在差别,但二者都可理解为至少一次处理外加幂等保证。分布式
上文提到的两种机制均使用持久的后端存储做为事实来源(Source of truth),用于保存每一个操做符的状态,并自动提交状态更新。对于机制 1(分布式快照 / 状态检查点),这个持久的后端存储可用于保存流应用程序中全局一致的状态检查点(每一个运算符的状态检查点);对于机制 2(至少一次事件交付,外加去重),这个持久的后端存储可用于保存每一个运算符的状态,以及为了追踪哪些事件已经被成功处理过而为每一个运算符生成的事务日志。日志
状态的提交或对事实来源的持久后端进行的更新可描述为事件(Occurring)的严格一次。然而在计算状态的更新 / 改动,例如所处理的事件正在针对事件执行各类用户定义的逻辑时,若是失败则可能进行屡次,这一点正如上文所述。换句话说,事件的处理可能会进行屡次,但处理的最终结果只会在持久的后端状态存储中体现一次。所以 Streamlio 认为“实际一次(Effectively-once)”能够更精确地描述这样地处理语义。事件