这里阐述一下Flink中 window间的数据倾斜的解决思路,不做代码展现
场景:
分项目统计某个时间粒度的pv数据
数据情况:
每个项目的数据量不同,某个项目的数据量很大,导致这个项目的窗口中的数据很大,发生倾斜
解决思路:
思路一:
针对window原始方式中在窗口触发前,是以数据积攒的方式进行的。所以针对这种方式可以在window后跟一个reduce方法,在窗口触发前采用该方法进行聚合操作(类似于MapReduce 中 map端combiner预处理思路)
思路二:
思路一种处理后仍有倾斜问题,或者也可以直接采用思路二进行优化、处理。
大致思路:
将key进行扩展,扩展成自定义的负载数,即,将原始的key封装后新的带负载数的key,进行逻辑处理,然后再对新key的计算结果进行聚合,聚合成原始逻辑的结果。
具体实现思路:
1.人为查看具体的倾斜的(数据量大的项目码,例如Code1)
2.将原始的数据元组中keyby分组的键进行扩展,扩展指定的负载个数
例如:
优化前:
数据元组:(项目码,1)