rebalance,shuffle,broadcast,rescaling,partitonCustom


flink在transformatin之后为了控制更小细粒度的分区,引入了物理分区功能的算子

分别是rebalance,shuffle,broadcast,rescaling,partitonCustom这五个

下面来一个个记录一下。

rebalance ,下游task分区会轮询的把每个上游task的数据拉取过来。,比如 现在上游有四个分区,下游也有四个分区,(比如上游的零号分区会依次发到下游的0号1号2号3号分区,依次类推)。注意不是一定按照0123这个顺序的,也会比如3012这种,这个不固定,固定的只是轮询顺序。具体看下面俩副图。

shuffle算子,这个是无顺序的,上游task的数据会随机给到下游分区中的一个,这个没有固定顺序。

broadcast算子,顾名思义,广播给下游的每一个task,上游task的一条顺序,下游task全部收到一份。

rescaling算子

这个算子也是 上游task数据轮询的给到每一个下游task,但是和rebalance算子不一样。rebalance是多节点的,rescaling是单节点的。

flink的架构是一个jobmanager对应多个taskmanager,一个taskmanager对应多个slot槽位。这多个taskmanager是可以相互通信的(和spark中的多分区一个道理)一个taskmanager是在一台机器,一个节点上的。 

所以如果不想要跨节点进行网络传输的话就使用rescaling,跨节点无所谓的话,就去使用rebalance.具体看下图。

partitonCustom算子

这是一个自定义分区算子,就是想要上游task分区的数据会被下游的哪个task拉取过去,你可以自己定义。(类似于spark中的自定义分区器)

这个算子是带参数的。你需要new俩个匿名函数,partitoner和keyselector。

partitoner中的参数s 是分区的key,numpartitons是下游的最大分区数

getkey无非就是上游datastream中的数据,从里面拿什么元素作为Key.