Stateful Stream Processing 是最低级别的抽象,它通过 Process Function 函数内嵌到 DataStream API 中。 Process Function 是 Flink 提供的最底层 API,具有最大的灵活性,允许开发者对时间和状态进行细粒度的控制。
4. 三种Time概念
算子状态是和算子进行绑定的,与Key无关,一个算子的状态不能被其他算子所访问到。官方文档上对 Operator State 的解释是:each operator state is bound to one parallel operator instance,所以更为确切的说一个算子状态是与一个并发的算子实例所绑定的,即假设算子的并行度是 2,那么其应有两个对应的算子状态:
reduce:可以对一个 dataset 或者一个 group 来进行聚合计算,最终聚合成一个元素reduceGroup:将一个 dataset 或者一个 group 聚合成一个或多个元素。reduceGroup 是 reduce 的一种优化方案; 它会先分组 reduce,然后在做整体的 reduce;如许做的好处就是可以减少网络 IO
minBy 和 maxBy:选择具有最小值或最大值的元素
Aggregate:在数据集上进行聚合求最值(最大值、最小值),注意: 使用 aggregate,只能使用字段索引名或索引名称来进行分组 groupBy(0) ,否则会报一下错误: Exception in thread "main" java.lang.UnsupportedOperationException: Aggregate does not support grouping with KeySelector functions, yet.