Flink教程-keyby 窗口數(shù)據(jù)傾斜的優(yōu)化

在大數(shù)據(jù)處理領(lǐng)域枝嘶,數(shù)據(jù)傾斜是一個(gè)非常常見(jiàn)的問(wèn)題,今天我們就簡(jiǎn)單講講在flink中如何處理流式數(shù)據(jù)傾斜問(wèn)題。

我們先來(lái)看一個(gè)可能產(chǎn)生數(shù)據(jù)傾斜的sql.


select 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) ,plat

在這個(gè)sql里帮碰,我們統(tǒng)計(jì)一個(gè)網(wǎng)站各個(gè)端的每分鐘的pv代兵,從kafka消費(fèi)過(guò)來(lái)的數(shù)據(jù)首先會(huì)按照端進(jìn)行分組尼酿,然后執(zhí)行聚合函數(shù)count來(lái)進(jìn)行pv的計(jì)算。如果某一個(gè)端產(chǎn)生的數(shù)據(jù)特別大植影,比如我們的微信小程序端產(chǎn)生數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于其他app端的數(shù)據(jù)裳擎,那么把這些數(shù)據(jù)分組到某一個(gè)算子之后,由于這個(gè)算子的處理速度跟不上思币,就會(huì)產(chǎn)生數(shù)據(jù)傾斜鹿响。

查看flink的ui,會(huì)看到如下的場(chǎng)景支救。

image

對(duì)于這種簡(jiǎn)單的數(shù)據(jù)傾斜,我們可以通過(guò)對(duì)分組的key加上隨機(jī)數(shù)各墨,再次打散,分別計(jì)算打散后不同的分組的pv數(shù)贬堵,然后在最外層再包一層,把打散的數(shù)據(jù)再次聚合黎做,這樣就解決了數(shù)據(jù)傾斜的問(wèn)題叉跛。

優(yōu)化后的sql如下:


select winEnd,split_index(plat1,'_',0) as plat2,sum(pv) from (

  select TUMBLE_END(proc_time, INTERVAL '1' MINUTE) as winEnd,plat1,count(*) as pv from (

    -- 最內(nèi)層,將分組的key蒸殿,也就是plat加上一個(gè)隨機(jī)數(shù)打散
    select 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)

在這個(gè)sql的最內(nèi)層鸣峭,將分組的key酥艳,也就是plat加上一個(gè)隨機(jī)數(shù)打散摊溶,然后求打散后的各個(gè)分組(也就是sql中的plat1)的pv值,然后最外層充石,將各個(gè)打散的pv求和莫换。

注意:最內(nèi)層的sql,給分組的key添加的隨機(jī)數(shù)骤铃,范圍不能太大,也不能太小惰爬,太大的話(huà),分的組太多撕瞧,增加checkpoint的壓力,太小的話(huà)风范,起不到打散的作用。在我的測(cè)試中硼婿,一天大概十幾億的數(shù)據(jù)量,5個(gè)并行度寇漫,隨機(jī)數(shù)的范圍在100范圍內(nèi),就可以正常處理了州胳。

修改后我們看到各個(gè)子任務(wù)的數(shù)據(jù)基本均勻了。

image

更多干貨信息遍膜,歡迎關(guān)注我的公眾號(hào)【大數(shù)據(jù)技術(shù)與應(yīng)用實(shí)戰(zhàn)】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓤湘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弛说,更是在濱河造成了極大的恐慌,老刑警劉巖木人,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冀偶,死亡現(xiàn)場(chǎng)離奇詭異渔嚷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)圃伶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蒲列,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蝗岖,你說(shuō)我怎么就攤上這事〉钟” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵划提,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹏往,道長(zhǎng),這世上最難降的妖魔是什么骇塘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任款违,我火速辦了婚禮唐瀑,結(jié)果婚禮上插爹,老公的妹妹穿的比我還像新娘。我一直安慰自己赠尾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布萍虽。 她就那樣靜靜地躺著,像睡著了一般超全。 火紅的嫁衣襯著肌膚如雪咆霜。 梳的紋絲不亂的頭發(fā)上嘶朱,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音疏遏,去河邊找鬼。 笑死财异,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戳寸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼袖瞻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了聋迎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤砌庄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奕枢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缝彬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年谷浅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扒俯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一疯。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖墩邀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眉睹,我是刑警寧澤废膘,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布慕蔚,位于F島的核電站丐黄,受9級(jí)特大地震影響孔飒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坏瞄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惦积。 院中可真熱鬧猛频,春花似錦、人聲如沸鹿寻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隘擎。三九已至狱窘,卻和暖如春财搁,著一層夾襖步出監(jiān)牢的瞬間蘸炸,已是汗流浹背尖奔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淹禾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓铃岔,卻偏偏與公主長(zhǎng)得像峭火,于是被迫代替她去往敵國(guó)和親德撬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355