排查思路
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