Physical Partitioning 物理分区
DataStream提供物理分区算子:决定上游Operator中各个分区数据如何发送到下游Operator的各个分区中。
![](https://img.haomeiwen.com/i27732789/68d2519977a405ba.png)
在DataStream函数中提供7种方式,常见的物理分区策略有随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)等
- global 全局算子
将上游所有的subtask处理的数据,发送给下游第一个subtask处理 -
broadcast 广播算子
上有内的一个subtask任务给下游所有的subtask 都发一份
适合 大表join小表 - forword 向前分区算子
上游subtask 跟下游subtask 1:1 必须一一对应不然报错 - shuffle
随机选择 上有shuffle 随机分发到下游的subtask -
rebalance 平衡算子
将上游所有的subtask 处理的数据 轮询的发送给下游的subtask
在flink中如果数据发送倾斜 直接调用 rebalance算子均衡分配 - rescale 基于并行度的算子
要求上下游的subtask的个数 必须是成倍数 -
custom
自定义分区算子
image.png
RichFunction
-
“富函数”是DataStream API提供的一个函数类的接口,==所有Flink函数类都有其Rich版本==。富函数类一般是以抽象类的形式出现的。
-
富函数RichFunction,可以获取运行环境的上下文,并拥有一些生命周期方法
方法
-
context 上下文对象:封装了程序运行时,才知道的一些参数,列如并行度,statu 状态 任务名字
-
open()
方法:
rich function的初始化方法,当一个算子例如map或者filter被调用之前open()会被调用,通常只用于那些只需要进行一次的设置工作 -
close()
方法:
生命周期中的最后一个调用的方法,做一些清理工作。
每个任务最后一次调用转换方法后调用一次。通常用于清理和释放资源。 -
getRuntimeContext()
方法:
提供了函数的RuntimeContext的一些信息,例如函数执行的并行度,任务的名字,以及state状态。
-
使用场景
当处理数据时,如果涉及到数据库连接、网络连接以及文件描述符的创建和关闭,使用富函数,以及想要了解 任务执行的一些信息
global
![](https://img.haomeiwen.com/i27732789/0c805f12eb1dbf38.png)
broadcast
![](https://img.haomeiwen.com/i27732789/cd0a84a597c52c9f.png)
forword 向前分区算子
![](https://img.haomeiwen.com/i27732789/5e6371babe37a101.png)
shuffle
![](https://img.haomeiwen.com/i27732789/b9ece2f5336f9628.png)
rebalance
![](https://img.haomeiwen.com/i27732789/0072f30086871b7c.png)
rescale
![](https://img.haomeiwen.com/i27732789/cd28aab52a2f226e.png)
custom
![](https://img.haomeiwen.com/i27732789/f8e7bf7b92c7d8c4.png)
网友评论