(1) 随机分区(Random Partitioning)

随机分到下游分区,分区相对均衡,但比较容易失去原有数据的分区结构

val shuffleStream = dataStream.shuffle

(2) 平衡分区(Roundrobin Partitioning)

重分区,尽可能保证每个分区内的数量平衡

val shuffleStream = dataStream.rebalance()

(3) 按比例分区(Rescaling Partitioning)

上游并发度2,下游并发度4,上游一个分区的数据就会路由到下游的两个分区中

senv.readTextFile("").rescale()

(4) 广播操作

下游算子中的tasks可以直接从本地内存中获取广播数据集,不再依赖于网络传输.这种分区策略适合小数据集,当大数据与小数据集关联时,可以广播的方式将小数据集分发到算子的每个分区中

val datas = senv.readTextFile("").broadcast()

(5) 自定义分区

import org.apache.flink.api.common.functions.Partitioner

import scala.util.Random

object customPartitioner extends Partitioner[String] {

 override def partition(key: String, numPartitions: Int): Int = {

   if (key.contains("flink"))

     0

   else

     Random.nextInt(numPartitions)

 }

}

Flink物理分区及数据转换

相关文章:

  • 2021-12-01
  • 2022-02-17
  • 2021-11-26
  • 2021-12-24
  • 2022-03-09
  • 2021-12-09
  • 2021-12-31
  • 2021-12-19
猜你喜欢
  • 2021-06-23
  • 2021-10-10
  • 2021-12-17
  • 2021-05-11
  • 2021-12-23
  • 2021-06-02
  • 2022-01-05
相关资源
相似解决方案