在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集群中运行会观察到相关的情况,所以本文不贴图了。最后按照惯例,附上本案例的源码,登录后即可下载。









还没有评论,来说两句吧...