1、Dataflow
- Dataflow图中,顶点为算子,代表计算,边代表数据依赖关系。
- 没有输入端的算子被称为数据源
-
没有输出端的算子被称为数据汇
数据流图
2、数据流上的操作
- 无状态的。处理事件时无需依赖已处理过的时间,也不保存历史数据。
- 有状态的。算子需要维护之前接收的事件信息,它们的状态会根据传入的事件更新,并用于未来事件的处理逻辑中。
2.1转换操作
转换操作就是只过一次的操作,比如map
转换操作
2.2 滚动聚合
根据每个到来的事件持续更新结果
滚动求最小值
2.3 窗口聚合
窗口操作会持续创建一些称为桶的有限事件集合,允许基于这些有限集进行计算
-
滚动窗口:将事件分配到长度固定且互不重叠的桶中
基于时间的滚动窗口 -
滑动窗口:将事件分配到大小规定且允许相互重叠的桶中
滑动窗口 -
会话窗口:根据事件之间的间隔将事件分为不同的会话
会话窗口
3、时间语义
- 处理时间:当前流处理算子在机器上的本地时钟时间。
- 事件时间:数据流中事件实际发生的时间。
水位线
水位线用来触发窗口。
水位线是一种被传递的特殊的时间戳数据。
水位线传递到算子的时候,算子认为水位线时间戳之前的数据都已经收到了。
3、状态和一致性保证
- 至多一次:每个事件至多被处理一次。不恢复、重放丢失事件,其实等于没有保障。
- 至少一次:所有事件都会最终处理,但是有些可能会处理多次。
- 精确一次:事件没有丢失且所有事件处理过一次。需要数据重放、确保内部状态一致性。flink采用轻量级检查点机制来实现精确一次结果保障。
- 端到端精确一次:整个数据管道上结果都是正确的。
网友评论