Flink学习笔记
转换算子
1.map
一进一出 消费一个数据产生一个数据
`
val value = env.addSource(new FlinkKafkaConsumer("test", new SimpleStringSchema(), properties)).map(word => (word, 1))
`
2.flatMap
消费一个数据经过处理可能产生零个或多个数据
3.filter
过滤算子 满足条件的数据保留不满足的舍弃
4.KeyBy
逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部hash的形式实现的
5.滚动聚合算子(Rolling Aggregation)
这些算子可以针对KeydStream的每一个支流做聚合。
sum()
min()
max() (只替代对应的字段)
minBy()
maxBy() (对应的一条数据都取出来)
(keyby和maxby配合使用)
6.Reduce
一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。
7.split和select
split
根据某些特征把一个DataStream拆分成两个或多个DataStream
select
从一个SplitStream中获取一个或者多个DataStream
需要:传感器数据按照温度高低,拆分成两个流
8.Connect和CoMap
Connect
连接两个保持他们类型的数据流,两个数据被Connect之后,只是被放在了一个同一个流中,内部依然保持各自的数据和形式不发生任何变化,两个相互独立。
CoMap
作用于ConnectedStreams上,功能与map和flatMap一样,对ConnectedStreams中的每一个Stream分别进行map和flatMap处理。
flink的window机制
窗口描述
是一种切割无限数据为有限块进行处理的手段
窗口是处理无界流的核心
窗口的分类
1.基于时间的窗口
左闭右开
滚动窗口
滑动窗口
会话窗口
全局窗口
2.基于元素个数的
滚动窗口
滑动窗口
3Window Function
ReduceFunction(增量聚合函数)
AggregateFunction(增量聚合函数)
ProcessWindowFunction(全窗口函数)
Flink中的时间语义与WaterMark
1.处理时间
处理时间是指的执行操作的各个设备的时间
2.事件时间
是指的这个事件发生的时间
那种时间重要
Flink中的状态分类
Managed State | Raw State | |
---|---|---|
状态管理方式 | Flink Runtime 托管,自动存储、自动恢复、自动伸缩 | 用户自己管理 |
状态数据结构 | Flink提供多种常用结构,例如ListState MaoState等 | 字节数组:byte[] |
使用场景 | 决大数Flink算子 | 所有算子 |