Flink中的算子是将一个或多个DataStream转换为新的DataStream,可以将多个转换组合成复杂的数据流拓扑。
在Flink中,有多种不同的DataStream类型,他们之间是使用各种算子进行的。如下图所示:
以下列举下常用的算子,用到的代码例子都是Flink监听9000端口做为数据源。以下方法可以启动一个9000的socket端口服务。
Linux平台上可以使用
bash
nc -lk 9000
- 1
- 2
如果是 Windows 平台,可以通过 https://nmap.org/ncat/ 安装 ncat 然后运行:
bash
ncat -lk 9000
- 1
- 2
map
map可以理解为映射,对每个元素进行一定的变换后,映射为另一个元素。
flatmap
flatmap可以理解为将元素摊平,每个元素可以变为0个、1个、或者多个元素。
filter
filter是进行筛选。
keyBy
逻辑上将Stream根据指定的Key进行分区,是根据key的散列值进行分区的。
reduce
reduce是归并操作,它可以将KeyedStream 转变为 DataStream。
fold
给定一个初始值,将各个元素逐个归并计算。它将KeyedStream转变为DataStream。
union
union可以将多个流合并到一个流中,以便对合并的流进行统一处理。是对多个流的水平拼接。
参与合并的流必须是同一种类型。
join
根据指定的Key将两个流进行关联。
coGroup
关联两个流,关联不上的也保留下来。
connect
参考:https://www.jianshu.com/p/5b0574d466f8
将两个流纵向地连接起来。DataStream的connect操作创建的是ConnectedStreams或BroadcastConnectedStream,它用了两个泛型,即不要求两个dataStream的element是同一类型。
split
参考:https://cloud.tencent.com/developer/article/1382892
参考链接:
https://blog.csdn.net/chybin500/article/details/87260869