一、抽象级别
Flink提供了不同级别的抽象,以及开发流处理和批处理作业
1、最底层的抽象仅仅提供了有状态流,通过过程函数(Process Function)嵌入到DataStream中 API中,用户可以自由的处理来自一个或者多个数据流的事件,并使用一致的容错的状态
2、DataStream API(有界或者无界数据集)以及DataSet api无界数据集
3、table API 以表为中心声明式DSL
4、flink最高级的抽象就是sql
二、窗口
- 滚动窗口(没有重叠)
- 滑动窗口(有重叠)
- 会话窗口(由不活动间隙所打断)
三、时间
- 事件时间:是事件创建的时间,它通常由事件中的时间戳描述,例如附接在生产传感器,或者生产服务,flink通过时间戳分配器访问事件时间戳
- 摄入时间:是事件进入flink的数据源计算都得时间
- 处理时间:每一个执行是事件的时间
四、有状态操作
- 尽管数据流中很多操作一次只查看一个独立的事件,有些操作却会记录多个事件的时间,这些操作被称为有状态的
五、容错检查点
- flink的流重放与checkpoint的结合实现了容错,checkpoint与每一个数据流及其相关的每一个算符的状态的特定先关联,一个数据流可以从一个checkpoint恢复出来,其中通过恢复算符状态并从检查点重放事件以保持一致性
六、流上的批处理
- Dataset api 中的程序不使用检查点,而通过完全的重放流来恢复,因为数据是有界的
- Dataset api中的有状态操作使用简化的im-memory/out-of-core数据结构,而不是键值索引
- Dataset api引入了特殊的同步(基于superstep的)迭代,而这种迭代仅仅能够在有界流上执行