Operator
Flink 常用的算子
Flink 数据处理模型
在 Flink 应用程序中,无论你的应用程序是批程序,还是流程序,都是下图这种模型,有数据源(source),有数据下游(sink)

Source: 数据源
- 基于本地集合、基于文件、基于网络套接字
- 自定义的
source Apache kafka、RabbitMQ
Transformation: 数据转换
Map/FlatMap/Filter/KeyBy/Reduce/Fold/Aggregations/Window/WindowAll/Union/Window join/Split/Select/Project
Sink: 接收器
- 写入文件、打印出来、写入
Socket、自定义的Sink - 自定义的
Sink Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、HDFS
Flink 算子 Operator
Map
获取一个元素并生成一个元素
FlatMap
获取一个元素并生成零个、一个或多个元素
filter

KeyBy
KeyBy 在逻辑上是基于 key 对流进行分区,相同的 Key 会被分到一个分区

Aggregations
DataStream API 支持各种聚合, 这些函数可以应用于 KeyedStream 以获得 Aggregations 聚合
常用的方法有
min、minBy、max、minBy、summax和maxBy之间的区别在于max返回流中的最大值,但maxBy返回具有最大值的键,min和minBy同理
Window
Window 函数允许按时间或其他条件对现有 KeyedStream 进行分组
10 秒的时间窗口的和(聚合)
socketStream.keyBy(0).window(Time.seconds(10)).sum(1) |
Union
Union 函数将两个或多个数据流结合在一起,这样后面在使用的时候就只需使用一个数据流就行了
inputStream.union(inputStream1, inputStream2, ...) |
val socketStream = env.socketTextStream("localhost", 9000, '\n') |
Window Join
通过一些 key 将同一个 window 的两个数据流 join 起来
stream.join(otherStream) |
inputStream.join(inputStream1) |
Split
根据条件将流拆分为两个或多个流

Select
从拆分流中选择特定流,那么就得搭配使用 Select 算子
通常搭配 Split 算子一起使用
