Flink实战(九十三):数据倾斜(二)keyby窗口数据倾斜的优化

更新时间:2023-06-11 21:20:05 阅读: 评论:0

Flink实战(九⼗三):数据倾斜(⼆)keyby窗⼝数据倾斜的
touch怎么读英语怎么说优化
声明:本系列博客是根据SGG的视频整理⽽成,⾮常适合⼤家⼊门学习。
在⼤数据处理领域,是⼀个⾮常常见的问题,今天我们就简单讲讲在flink中如何处理流式数据倾斜问题。
一天一天 智妍
我们先来看⼀个可能产⽣数据倾斜的sql.
lect TUMBLE_END(proc_time, INTERVAL '1' MINUTE) as winEnd,plat,count(*) as pv  from source_kafka_table
group by TUMBLE(proc_time, INTERVAL '1' MINUTE) ,platlike the last one
在这个sql⾥,我们统计⼀个⽹站各个端的每分钟的pv,从消费过来的数据⾸先会按照端进⾏分组,然后执⾏聚合函数count来进⾏pv的计算。如果某⼀个端产⽣的数据特别⼤,⽐如我们的微信⼩程序端产⽣数据远远⼤于其他app端的数据,那么把这些数据分组到某⼀个算⼦之后,由于这个算⼦的处理速度跟不上,就会产⽣数据倾斜。
查看flink的ui,会看到如下的场景。
whenever的用法>插头英文
对于这种简单的数据倾斜,我们可以通过对分组的key加上随机数,再次打散,分别计算打散后不同的分组的pv数,然后在最外层再包⼀层,把打散的数据再次聚合,这样就解决了数据倾斜的问题。
bronya
优化后的sql如下:
lect winEnd,split_index(plat1,'_',0) as plat2,sum(pv) from (
lect TUMBLE_END(proc_time, INTERVAL '1' MINUTE) as winEnd,plat1,count(*) as pv from (
-- 最内层,将分组的key,也就是plat加上⼀个随机数打散
lect plat || '_' || cast(cast(RAND()*100 as int) as string) as plat1 ,proc_time from source_kafka_table
训诫是什么意思) group by TUMBLE(proc_time, INTERVAL '1' MINUTE), plat1翻译价格
) group by winEnd,split_index(plat1,'_',0)
在这个sql的最内层,将分组的key,也就是plat加上⼀个随机数打散,然后求打散后的各个分组(也就是sql中的plat1)的pv值,然后最外层,将各个打散的pv求和。商务英语文章
注意:最内层的sql,给分组的key添加的随机数,范围不能太⼤,也不能太⼩,太⼤的话,分的组太多,增加checkpoint的压⼒,太⼩的话,起不到打散的作⽤。在我的测试中,⼀天⼤概⼗⼏亿的数据量,5个并⾏度,随机数的范围在100范围内,就可以正常处理了。
accomplish
修改后我们看到各个⼦任务的数据基本均匀了。

本文发布于:2023-06-11 21:20:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/141739.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   打散   倾斜   分组   范围   看到   问题   聚合
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图