Physical Partitioning in Flink Streaming

一、Physical partitioning

  • 在一个transformation之后,Flink也提供了底层API以允许用户在必要时精确控制流分区。
  • 所谓的Physical partitioning(或operator partition)就是operator parallel instance即SubTask。
  • Flink allows us to perform physical partitioning of the stream data. You have an option to
    provide custom partitioning. Let us have a look at the different types of partitioning.

1、Custom partitioning

  • As mentioned earlier, you can provide custom implementation of a partitioner.
  • While writing a custom partitioner you need make sure you implement an efficient hash function.

2、Shuffle (Random partitioning 随机)

  • Random partitioning randomly partitions data streams in an evenly(均匀) manner.

3、Rebalancing partitioning(均匀 via round robin method)

  • This type of partitioning helps distribute the data evenly. It uses a round robin method for distribution. This type of partitioning is good when data is skewed.
    Physical Partitioning in Flink Streaming_第1张图片
    rebalance.jpg

4、Rescaling

Rescaling is used to distribute the data across operations, perform transformations on sub-sets of data and combine them together. This rebalancing happens over a single node only, hence it does not require any data transfer across networks.

5、Broadcasting(动态规则更新)

  • Broadcasting distributes all records to each partition. This fans out each and every element to all partitions.

二、比较

1、shuffle VS rebalance(来自stackoverflow)

正如文档所述,shuffle将随机分发数据,而rebalance将以循环方式分发数据。后者更有效,因为您不必计算随机数。而且,根据随机性,你最终可能会得到某种不那么均匀的分布。

另一方面,rebalance将始终开始将第一个元素发送到第一个通道。因此,如果您只有少量元素(元素少于子任务),那么只有部分子任务将接收元素,因为您总是开始将第一个元素发送到第一个子任务。在流式传输的情况下,这最终无关紧要,因为你通常有一个无界的输入流。

两种方法存在的实际原因是历史原因。shuffle首先介绍。为了使批处理的流API更加相似,rebalance然后介绍了

2、Rescaling(低配版Rebalance, 无需网络传输)

以round-robin方式对元素分区到下游operations。如果你想从source的每个并行实例分散到若干个mappers以负载均衡,但是你不期望rebalacne()那样进行全局负载均衡,这将会有用。这将仅需要本地数据传输,而不是通过网络传输数据,具体取决于其他配置值,例如TaskManager的插槽数。

上游operation所发送的元素被分区到下游operation的哪些子集,取决于上游和下游操作的并发度。例如,如果上游operation并发度为2,而下游operation并发度为6,则其中1个上游operation会将元素分发到3个下游operation,另1个上游operation会将元素分发到另外3个下游operation。相反地,如果上游operation并发度为6,而下游operation并发度为2,则其中3个上游operation会将元素分发到1个下游operation,另1个上游operation会将元素分发到另外1个下游operation。

在上下游operation的并行度不是彼此的倍数的情况下,下游operation对应的上游的operation输入数量不同。


Physical Partitioning in Flink Streaming_第2张图片
image.png

你可能感兴趣的:(Physical Partitioning in Flink Streaming)