在flink的Dataset开发中,我们可以从外部读取数据源,此时在线上的集群运行中,读取数据源之后,会为任务拆分多个task任务,此时有的task可能拿到的数据比较多,计算时间比较久,有的task可能拿到的数据比较少,计算时间比较短,这样子对于整个业务来说,总体来看造成了数据不均衡的效果,同时也很浪费集群资源。那么怎么办呢?
这里就可以用到我们本文提到的rebalance函数,rebalance函数就是把分区的数据再均衡一下,消除数据倾斜的作用,下面我们用代码演示一下:
package org.example; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.operators.DataSource; import org.apache.flink.api.java.tuple.Tuple2; import java.util.Arrays; public class RebalanceFunJob { public static void main(String[] args) throws Exception{ final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSource<Tuple2> datasources = env.fromCollection(Arrays.asList( new Tuple2("张三", "16"), new Tuple2("李四", "17"), new Tuple2("王五", "18") )); datasources.rebalance(); } }
这里运行看不到结果,在flink集群中运行会观察到相关的情况,所以本文不贴图了。最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...