gydtep 发表于 2022-10-13 17:14:59

上面提到,流计算的输入数据是没有边界的,这符合我们传统上对流计算认知。在《System Streaming》一书中,作者提出了一个将流批统一考虑的流计算理论抽象

gydtep 发表于 2022-10-14 08:28:00

如果定义流计算的输入集合为:E,t 时刻以来的输入集合为 E(t),输出集合为 Sink(t),引擎此时状态为 State(t),State(t) 包括各个算子的状态(包括上面提到的不确定性计算)、数据源的消费偏移量(或文件读取偏移等)等:

gydtep 发表于 2022-10-14 14:10:52

则需定期以事务的方式进行批量存储。对于每一个 O(t) 存储后, 恢复函数 R 的实现就简单多了:任务恢复时,将 O(t) 重新加载,使用 F 执行重算操作。

gydtep 发表于 2022-10-14 19:01:04

,如果考虑吞吐率不能存储每一条,则需定期批量存储,上述条件中去掉了对「事务」的要求的原因:如果在提交这一批数据的提交过程中又发生了异常,

gydtep 发表于 2022-10-15 16:46:10

如上图所示,Flink 引擎会定时(每个周期称之为一个 epoch)以 2PC 的方式提交结果。事实上,即便不考虑结果输出,Flink 「分布式一致性快照」的快照的实现也是一个 2PC 的过程

gydtep 发表于 2022-10-16 10:18:38

所以平均事务大小由提交间隔确定,当流量相同时,较短的提交间隔将导致较小的事务,但太小的间隔将导致吞吐下降,因此吞吐量与端到端处理延迟之间需要有一个折衷。

gydtep 发表于 2022-10-17 09:03:44

则流计算中的数据一致性同关系型数据库事务 ACID 理论中的 Consistency 有异曲同工之妙,后者指的是在事务开始或结束时,数据库中的记录应该在一致状态

gydtep 发表于 2022-10-17 19:15:08

流计算中的确定性指的是,给定相同的一组数据,重复运行多次或者打乱数据进入引擎的顺序,计算完成后将会输出相同的结果,否则就是非确定性计算。

gydtep 发表于 2022-10-18 09:22:53

前者的语义约束弱于后者。Exactly-once State Consistency 只是表达了:流计算要求对状态的更新只提交一次到持久后端存储,但这里的状态一般不包括「输出到下游结果」,

gydtep 发表于 2022-10-18 15:58:01

如果定义流计算的输入集合为:E,t 时刻以来的输入集合为 E(t),输出集合为 Sink(t),引擎此时状态为 State(t),State(t) 包括各个算子的状态(包括上面提到的不确定性计算)、数据源的消费偏移量(或文件读取偏移等)等:
页: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18
查看完整版本: 腾讯云轻量应用服务器2核2G4M仅20元