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.