流处理引擎(SPE)中的的分布式一致性语义之Exactly-Once和Effectively-Onece区别
2024-08-27 06:29:13
-- At most Onece:最多一次,如果算子处理事件失败,事件将不再尝试该事件。
-- At Least Onece:至少一次,如果算子处理事件失败,算子会再次尝试该处理事件,直到有一次成功。
Exactly-Once:严格一次,通常有两种方法实现:
-- 1.分布式快照+状态检查点,思想就是对比检查点和分布式快照中的状态,如出现状态不一致就回退到最小状态处,重新计算。
-- 2.At least Onece + 去重,重播失败的算子,并删除重复算子的结果。
-- 虽然从理论上看,分布式快照,和至少一次事件交付外加去重,这两种机制之间存在差异,但两者均可理解为至少一次处理外加幂等保证。
上文提到的两种机制均使用持久的后端存储作为事实来源(Source of truth),用于保存每个操作符的状态,并自动提交状态更新。对于机制 1(分布式快照 / 状态检查点),这个持久的后端存储可用于保存流应用程序中全局一致的状态检查点(每个运算符的状态检查点);对于机制 2(至少一次事件交付,外加去重),这个持久的后端存储可用于保存每个运算符的状态,以及为了追踪哪些事件已经被成功处理过而为每个运算符生成的事务日志。
状态的提交或对事实来源的持久后端进行的更新可描述为事件(Occurring)的严格一次。然而在计算状态的更新 / 改动,例如所处理的事件正在针对事件执行各种用户定义的逻辑时,如果失败则可能进行多次,这一点正如上文所述。换句话说,事件的处理可能会进行多次,但处理的最终结果只会在持久的后端状态存储中体现一次。因此 Streamlio 认为“实际一次(Effectively-once)”可以更精确地描述这样地处理语义。
Effectively-Onece:有效的一次或者最终一次。
最新文章
- Jsonp跨域
- 好的Ui界面地址
- 权重最小生成树的思想与Kruskal算法
- 电脑莫名其妙的被装上了流氓软件DNSunlocker的解决办法
- USB协议规范学习(一)
- 富客户端 wpf, Winform 多线程更新UI控件
- java 线程的几种状态
- linux下svn常用指令
- python django第一天
- 增加Android可用内存
- xilinx仿真库的作用(原创)
- Java 舍入模式 数字的格式化
- 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记
- Python写入文件,但是发现文件为空,竟然未写入!
- RoboGuice注入框架简单应用
- SWT实践过程中遇到的问题
- 判断 iPhone 是否已插入 SIM 卡的方法
- 精通CSS+DIV基础总结(三)
- std::cout和printf
- 拓展Unity3D编辑器
热门文章
- Egret学习-初次创建项目
- Dappy如何防止DNS黑客入侵
- 机器学习环境配置系列一之CUDA
- Python 判断小数的函数
- centos7搭建hadoop2.10高可用(HA)
- PKU-2723 Get Luffy Out(2-SAT+二分)
- PKU 1185-炮兵阵地(状压DP)
- 云原生 - Why is istio(二)
- learn more ,study less(一):整体性学习策略
- linux实用指令 | 程序员线上排查必知必会linux指令(持续更新中)