flink 分区策略

背景

当使用DataStream操作流数据时,由于经过fliter操作后数据分布不均匀,或者由于下游的算子需要接收全部相同的数据,这样就有需要对数据进行分区操作,本文就介绍常见的几种分区策略

分区策略

1.使用DataStream.shuffle操作按照随机的方式向下游算子任务发送消息,平衡负载
2.使用DataStream.rebalacne操作将上有算子任务的消息按照轮流的方式发送到下游,平衡负载,注意这种负载均衡方式要求上游算子任务和每个下游算子任务都要建立一条tcp通信通道
3.使用DataStream.rescale操作也是将消息以轮流的方式发送到下游任务,但是它和rebalace的区别是上游算子的每个任务只与部分下游算子任务创建tcp连接,对于上游算子的这个任务而已,负载均衡仅在少数的几个下游任务之间,不过整体上也是可以达到负载均衡的目的的
4.使用DataStream.broadcast把事件发送到下游算子的所有任务上,也就是下游算子的每个任务都会收到上游算子的发送的所有事件
5.使用DataStream.partitionCustom方法,然后通过自己实现自定义的分区抽象类Partitioner的方法来实现,比如把某些整数范围的事件发送到下游的0算子任务,把另外一些其它整数范围的事件发送到下游的其他index的算子任务上,根据已有的数据分布来决定如何分区,以达到数据均衡的目的

注意事项

注意DataStream的分区和keyby是完全不同的两种概念,分区的目的是为了确保下游的DataStream的任务的数据处理是均衡的,没有数据倾斜,而keyby的目的是为了对数据进行分组,进而可以使用键值分区状态

你可能感兴趣的:(flink,flink,大数据)