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
、sum
max
和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
算子一起使用