FLINK数据倾斜的解决思路

排查思路

1、查看该任务是否有反压现象

利用Flink WebUi查看任务是否有反压情况,结果正常,没有出现反压现象。

如果有反压,一般是红色节点往后的一个节点效率或者处理耗时很多,经常出现的是 开窗 分组,维表join,或者 sink 节点入库时间太久等情况。总之根据 web ui 找到对应节点, 可以增大并发,调整资源。

2、 查看是否有数据倾斜现象

当出现数据倾斜的时候,某一个窗口的数据太大导致无法处理或者处理很慢,所以造成kafka中数据堆积太多。

这种情况出现数据倾斜,是由于 按照字段 keyBy,热点数据过多出现倾斜。 热点数据 可能是随访问量 或则交易量增加、或者数据里出现的大量重复的值。
然后刚好按照这个字段进行 keyBy 导致。

3、 解决办法

对于keyby的数据倾斜的解决办法可以是对key进行改造,让数据分布更加均匀。

也可以 过滤掉这些重复的脏数据。如果是因为垃圾数据造成的,就直接将它过滤掉就好,没有必要进行改造key的操作

4、改造key的实现

这里当然也提供一下改造key的方法实现,原理就不解释了,很简单。

 env.addSource(new CustomBeanSource()).keyBy(ele -> ele.getDeviceName() + "-" + new Random().nextInt(10))
                .timeWindow(Time.seconds(60))
                .sum("bandWidth")
                .keyBy(ele -> ele.getDeviceName())
                .sum("bandWidth")
                .addSink(....)

sql实现

SELECT id,sum(sum_level) sumLevel
FROM
(
	SELECT nk,sum(`level`) sum_level,id FROM 
	(
	select id,`level`,concat(id,'-',ROUND(10*RAND(),0)) nk
	FROM
	test
	) t1
	GROUP BY nk
) t2
GROUP BY id

Guess you like

Origin blog.csdn.net/weixin_43975771/article/details/120673443