柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù) flink優(yōu)化
柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù) flink優(yōu)化
1.?大狀態(tài)調(diào)優(yōu)
我們?cè)谧鯱V獨(dú)立訪客數(shù)的時(shí)候,將用戶的訪問時(shí)間保存到了狀態(tài)中,由于訪客比較多,大概有1000萬,所以會(huì)造成大狀態(tài),解決辦法:因?yàn)槲覀兪墙y(tǒng)計(jì)的一天的獨(dú)立訪客數(shù),所以我們?cè)O(shè)置狀態(tài)的TTL為一天,這樣就解決了大狀態(tài)問題。
大狀態(tài)調(diào)優(yōu):在我們的項(xiàng)目中,在做新老訪客修復(fù)時(shí),我們將每個(gè)mid的訪問時(shí)間都存到了狀態(tài)里面,在做回流用戶數(shù)時(shí),我們將每個(gè)用戶的登錄時(shí)間都存到了狀態(tài)里面,導(dǎo)致了大狀態(tài)問題,由于hashmap狀態(tài)后端會(huì)將數(shù)據(jù)存儲(chǔ)到內(nèi)存,所以就會(huì)出現(xiàn)內(nèi)存不夠的情況。
?我們的解決辦法就是將狀態(tài)后端改成了rocksdb,并且開啟增量檢查點(diǎn)和本地恢復(fù)去進(jìn)行調(diào)優(yōu)。
還有就是做回流用戶的時(shí)候,需要把用戶的末次登錄日期保存到狀態(tài)中,也會(huì)造成大狀態(tài),解決辦法:換成rocksdb
2.?反壓
反壓:反壓其實(shí)就是下游數(shù)據(jù)的計(jì)算速度,趕不上上游數(shù)據(jù)的發(fā)送速度。
我們遇到過一次反壓,就是我們DWS層的訂單表,需要去和hbase的維度表進(jìn)行關(guān)聯(lián),在關(guān)聯(lián)的過程中,涉及到很多的網(wǎng)絡(luò)IO,所以導(dǎo)致算子計(jì)算變慢,產(chǎn)生了反壓。
那我們?cè)趺炊ㄎ环磯旱哪兀?我們是通過查看Web UI,發(fā)現(xiàn)map算子是黑色,然后我們?nèi)ゲ榭创a邏輯,發(fā)現(xiàn)了這個(gè)問題。
我們是通過添加Redis旁路緩存來解決這個(gè)問題的,因?yàn)镽edis讀取數(shù)據(jù)比較快,所以解決了算子計(jì)算慢的問題,也就解決了反壓的問題。
然后我們考慮到,寫Doris的時(shí)候也是和外部系統(tǒng)進(jìn)行交互,可能也會(huì)產(chǎn)生反壓?jiǎn)栴},所以我們通過設(shè)置攢批發(fā)送,來預(yù)防反壓?jiǎn)栴}。
還有如果我們第二天做活動(dòng),那么我們會(huì)提前增加服務(wù)器和內(nèi)存、CPU資源,來預(yù)防大數(shù)據(jù)量造成的反壓?jiǎn)栴}。
3. 數(shù)據(jù)傾斜
我們項(xiàng)目中還遇到過數(shù)據(jù)傾斜的問題,比如我們將MySQL中的數(shù)據(jù)存到kafka時(shí),是以表名作為key保存到kafka的不同分區(qū)當(dāng)中的,當(dāng)我們用flink程序去讀取kafka的數(shù)據(jù)時(shí),因?yàn)槊總€(gè)表的數(shù)據(jù)量不同,所以每個(gè)并行度處理的數(shù)據(jù)量是相差很大的,就造成了數(shù)據(jù)傾斜。
我們的解決辦法就是在source算子的后面,加上了rebalance算子,就可以將輸入流數(shù)據(jù)平均分配到下游的并行任務(wù)中去,就解決了數(shù)據(jù)傾斜問題。
還有就是我們?cè)诮y(tǒng)計(jì)各省份GMV的時(shí)候,由于每個(gè)省份的數(shù)據(jù)量不同,所以在我們根據(jù)省份keyby之后,導(dǎo)致有的分區(qū)數(shù)據(jù)量比別的分區(qū)數(shù)據(jù)量大很多,就導(dǎo)致了數(shù)據(jù)傾斜問題。
我們?cè)诮y(tǒng)計(jì)計(jì)算各省份GMV的時(shí)候出現(xiàn)了頻繁的反壓,所以就考慮說是不是數(shù)據(jù)傾斜的問題,排查完后發(fā)現(xiàn)確實(shí)是數(shù)據(jù)傾斜,kafka根據(jù)不同的key存到不同的分區(qū)當(dāng)中,根據(jù)表的表明作為key存到不同的分區(qū)當(dāng)中,但是有些表的數(shù)據(jù)比較多,導(dǎo)致某個(gè)分區(qū)的量比較多,下游去消費(fèi)的時(shí)候?qū)е履硞€(gè)并行度的數(shù)據(jù)比較多,就導(dǎo)致了數(shù)據(jù)傾斜,所以說我們統(tǒng)計(jì)各省份GMV的時(shí)候,就出現(xiàn)了這種情況,之后我們討論出了兩種解決方案,一種是為了避免熱點(diǎn) key 的設(shè)計(jì),把北京、上海等熱點(diǎn)城市分成不同的區(qū)域,進(jìn)行單獨(dú)的處理。還有一種是通過兩階段聚合解決 KeyBy 熱點(diǎn),首先把分組的 key 打散,比如加隨機(jī)后綴,對(duì)打散后的數(shù)據(jù)進(jìn)行聚合,把打散的 key 還原為真正的 key,二次 KeyBy 進(jìn)行結(jié)果統(tǒng)計(jì),然后輸出。 ?
柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù) flink優(yōu)化
相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。