FLINK基础(144): DS算子与窗口(26)Flink DataStream 八大分区策略与自定义分区器(1)关于数据分区/Flink 里提供的分区策略

1 关于数据分区

  数据分区是指在传统的批处理中对数据 Shuffle 的操作。如果把扑克牌想成数据,传统批处理里的 Shuffle 操作就相当于理牌的过程。一般情况下在抓牌过程中,我们都会把牌理顺排列好,相同的数字还要放在一起。这样做最大的好处是,出牌时可以一下子找到想出的牌。Shuffle 是传统的批处理的方式。因为流处理所有的数据都是动态来的,所以理牌的过程或者说处理数据,进行分组或分区的过程,也是在线来完成的。
FLINK基础(144):  DS算子与窗口(26)Flink DataStream 八大分区策略与自定义分区器(1)关于数据分区/Flink 里提供的分区策略
例如上图右侧所示,上游有两个算子 A 的处理实例,下游是三个算子 B 处理实例。这里展示的流处理等价于 Shuffle 的操作被称为数据分区或数据路由。它用来表示 A 处理完数据后,要把结果发到下游 B 的哪个处理实例上。

2 Flink 里提供的分区策略

  图 X 是 Flink 提供的分区策略。需要注意的是, DataStream 调用 keyBy 方法后,可以把整个数据按照一个 Key 值进行分区。但要严格来讲,其实 keyBy 并不算是底层物理分区策略,而是一种转换操作,因为从 AP I 角度来看,它会把DataStream 转化成 KeyedDataStream 的类型,而这两者所支持的操作也有所不同。
 

FLINK基础(144):  DS算子与窗口(26)Flink DataStream 八大分区策略与自定义分区器(1)关于数据分区/Flink 里提供的分区策略

  所有这些分区策略里,稍微难理解的可能是 Rescale。Rescale 涉及到上下游数据本地性的问题,它和传统的 Rebalance,即 Round-Pobin,轮流分配类似。区别在于 Rescale 是它会尽量避免数据跨网络的传输。
  如 果 所 有 上 述 的 分 区 策 略 都 不 适 用 的 话 , 我 们 还 可 以 自 己 调 用PartitionCustom 去自定义一个数据的分区。值得注意的是,它只是自定义的单播,即对每一个数据只能指定它一个下游所要发送的实例,而没有办法把它复制成多份发送到下游的多个实例中。

 

 

 

 

 

FLINK基础(144): DS算子与窗口(26)Flink DataStream 八大分区策略与自定义分区器(1)关于数据分区/Flink 里提供的分区策略

上一篇:PS动作实例教程:素描效果和调色


下一篇:前端单点登录(SSO)