Flink的三种时间语义与Exactly-Once的保证

Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。

Ingestion Time:是数据进入Flink的时间。

Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是Processing Time。

 

下级存储支持事务:Flink可以通过实现两阶段提交和状态保存来实现端到端的一致性语义。 分为以下几个步骤:

1)开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面

2)预提交(preCommit)将内存中缓存的数据写入文件并关闭

3)正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟

4)丢弃(abort)丢弃临时文件

5)若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。

下级存储不支持事务:

具体实现是幂等写入,需要下级存储具有幂等性写入特性。

posted @ 2020-03-21 22:24  曲水修竹  阅读(199)  评论(0编辑  收藏  举报