Flink中数据倾斜问题怎么解决?
通过循环的方式依次发送到下游的task
问题产生背景
Flink也有数据倾斜的时候,比如当前有数据量大概10亿条数据需要处理,在处理过程中可能会发生如图所示的状况:

这个时候本来总体数据量只需要10分钟解决的问题,出现了数据倾斜,机器1上的任务需要4个小时才能完成,那么其他3台机器执行完毕也要等待机器1执行完毕后才算整体将任务完成;
所以在实际的工作中,出现这种情况比较好的解决方案就是本节课要讲解的—rebalance

源码解读

图解

步骤
构建批处理运行环境
使用 env.generateSequence 创建0-100的并行数据
使用 fiter 过滤出来 大于8 的数字
使用map操作传入 RichMapFunction ,将当前子任务的ID和数字构建成一个元组
在RichMapFunction中可以使用 getRuntimeContext.getIndexOfThisSubtask 获取子任务序号
打印测试
举例
在不使用rebalance的情况下,观察每一个线程执行的任务特点
使用rebalance
