Flink 優(yōu)化及問題

問題排查

  • 看反壓:背壓高的下游oprator就是瓶頸
  • 關(guān)注checkpoint時長
    checkpoint時長一定程度影響系統(tǒng)吞吐
  • 看核心指標(biāo)
    延遲指標(biāo)秦忿、吞吐等
  • 資源使用率

常見問題

  1. json序列化反序列化
    通常在source和sink的task上,在指標(biāo)上沒有體現(xiàn),容易被忽略(取消operator chain,查看反壓)
  2. 數(shù)據(jù)傾斜
    數(shù)據(jù)傾斜影響系統(tǒng)吞吐
  3. 頻繁GC
    內(nèi)存比例分配不合理導(dǎo)致頻繁gc弄贿,影響吞吐甚至tm失聯(lián)
  4. MAP和SET的hash沖突
    有hashmap和hashset 隨著負(fù)載因子的增高孝冒,引起插入和查詢性能下降
  5. 和低速的系統(tǒng)交互
    和低速的外部系統(tǒng)交互,mysql侵贵、hbase (增加應(yīng)用緩存、積攢批次處理避免單條查詢)
  6. 大窗口
    1)窗口size大笆制、數(shù)據(jù)量大
    2)滑動窗口size和step步長比例較大 eg size=5min,step=1s 同一條數(shù)據(jù)查法很多窗口的計算

數(shù)據(jù)傾斜影響

  • 數(shù)據(jù)熱點:數(shù)據(jù)集中在某些task中,數(shù)據(jù)不平衡
  • GC頻繁:過多的數(shù)據(jù)在jvm,導(dǎo)致內(nèi)存資源短缺,觸發(fā)頻繁gc
  • 吞吐下降,數(shù)據(jù)延遲增大
  • 系統(tǒng)崩潰 過長的gc會導(dǎo)致tm和jm失聯(lián),系統(tǒng)崩潰

數(shù)據(jù)傾斜

1.源頭
數(shù)據(jù)源消費不均勻,調(diào)整并行度(eg kakfa 分區(qū) 3個kafka分區(qū) 兩個并行度 導(dǎo)致其中一個task處理2個kafka分區(qū) 另一個處理一個分區(qū))
解決辦法:通常source的并法度是kafka分區(qū)的整數(shù)倍

2.聚合場景


image.png

解決辦法:兩段聚合的方式(局部聚合+全局聚合)
方案適用場景:對RDD執(zhí)行reduceByKey等聚合類shuffle算子或者在Spark SQL中使用group by語句進(jìn)行分組聚合時氮墨,比較適用這種方案。

方案實現(xiàn)思路:這個方案的核心實現(xiàn)思路就是進(jìn)行兩階段聚合栗弟。第一次是局部聚合污筷,先給每個key都打上一個隨機(jī)數(shù)(注意:隨機(jī)數(shù)范為選擇為下游并發(fā)度),比如10以內(nèi)的隨機(jī)數(shù)乍赫,此時原先一樣的key就變成不一樣的了瓣蛀,比如(hello, 1) (hello, 1) (hello, 1) (hello, 1),就會變成(1_hello, 1) (1_hello, 1) (2_hello, 1) (2_hello, 1)雷厂。接著對打上隨機(jī)數(shù)后的數(shù)據(jù)惋增,執(zhí)行reduceByKey等聚合操作,進(jìn)行局部聚合改鲫,那么局部聚合結(jié)果诈皿,就會變成了(1_hello, 2) (2_hello, 2)。然后將各個key的前綴給去掉像棘,就會變成(hello,2)(hello,2)稽亏,再次進(jìn)行全局聚合操作,就可以得到最終結(jié)果了缕题,比如(hello, 4)截歉。

內(nèi)存調(diào)優(yōu)

image.png

Flink中的總內(nèi)存由JVM堆、manager memory和network buffers構(gòu)成
對于容器化部署烟零,總內(nèi)存還可以包括一個容器預(yù)留內(nèi)存

所有其他內(nèi)存組件都是在啟動Flink進(jìn)程之前從total memory中計算出來的瘪松。啟動后咸作,manager memory和network buffers在某些情況下根據(jù)進(jìn)程內(nèi)可用的JVM內(nèi)存進(jìn)行調(diào)整
total memory 由taskmanager.heap.size指定
在Yarn or Mesos部署時,是請求容器大小

Container cut-off

引入截斷是為了適應(yīng)其他類型的內(nèi)存消耗,而這些消耗在這個內(nèi)存模型中沒有考慮宵睦,例如RocksDB本機(jī)內(nèi)存性宏、JVM開銷等。它也是一個安全余量状飞,以防止容器超出其內(nèi)存限制并被容器管理器殺死毫胜。
containerized.heap-cutoff-ratio :默認(rèn)為0.25(占總內(nèi)存的)

堆外內(nèi)存調(diào)優(yōu)

  • NetworkBuffer
    taskmanager.network.memory.fraction:默認(rèn)是0.1
    taskmanager.network.memory.min:默認(rèn)是64M
    taskmanager.network.memory.max: 默認(rèn)是1G
    一般taskmanager.network.memory.fraction是0.1或小于0.1 根據(jù)使用情況調(diào)整

  • ManagerBuffer :
    taskmanager.memory.off-heap:true(默認(rèn)是false不開啟)
    taskmanager.memory.fraction(默認(rèn)是0.7)
    考慮到流計算過程中ManagerBuffer沒有使用,可以taskmanager.memory.fraction調(diào)整小于0.3

堆內(nèi)內(nèi)存調(diào)優(yōu)
flink運行在jvm上,F(xiàn)link使用的 Parallel Scavenge垃圾回收器可以改為G1

env.java.opts= -server -XX:+UseG1GC - XX:MaxGCPauseMillis=300 -XX:+PrintGCDetails

內(nèi)存模型的例子

TM總內(nèi)存8G, cutoff:容器的預(yù)留內(nèi)存(k8s诬辈、yarn)為8G * 0.25

taskmanager.memory.fraction設(shè)置,例如
0.8的值意味著TM為內(nèi)部數(shù)據(jù)緩沖區(qū)保留了80%的內(nèi)存(堆內(nèi)或堆外酵使,取決于taskmanager.memory.off . heap),將20%的空閑內(nèi)存留給TM的堆焙糟,供用戶定義的函數(shù)創(chuàng)建的對象使用口渔。此參數(shù)僅在taskmanager.memory未設(shè)置是生效。
managed = (total - network) x fraction
heap = total - managed (if off-heap) - network
network = Min(max, Max(min, fraction x total)

  • 作業(yè)failover的常見原因
    jobmanager
    zk訪問超時
    長時間GC
    資源問題
    主機(jī)故障(磁盤等)
  • taskmanager
    上下游異常
    數(shù)據(jù)問題
    runtime異常
    主機(jī)異常

延遲問題處理

  • 延遲與吞吐
    確定延時節(jié)點及時間
  • 反壓分析
    找到反壓節(jié)點
    指標(biāo)分析
    查看一段時間的指標(biāo)
    堆棧
    找到指定節(jié)點jvm進(jìn)程穿撮、分析jstack等信息
    相關(guān)日志
    查看taskmanager日志是否有異常

作業(yè)性能問題

  • 延時與吞吐
    延時指標(biāo)
    tps吞吐
    節(jié)點輸入輸出
  • 反壓
    找出反壓源節(jié)點
    節(jié)點連接方式 shuffle缺脉、rebanlance、hash
    節(jié)點個并發(fā)情況
    業(yè)務(wù)邏輯悦穿、是否有正則攻礼、外部系統(tǒng)訪問等

作業(yè)性能問題

  • 指標(biāo)
    gc時間
    gc次數(shù)
    state checkpoint性能
    外部系統(tǒng)訪問延時
  • 堆棧
    節(jié)點所在taskmanager進(jìn)程
    查看線程PID


    image.png
  • 常見處理方式

  • 調(diào)整節(jié)點并發(fā)
    性能瓶頸問題增加并發(fā)

  • 調(diào)整節(jié)點資源
    增加節(jié)點內(nèi)存 cpu資源

  • 拆分節(jié)點
    將chain在一起消耗資源較多的operator分開,增加并發(fā)

  • 作業(yè)集群優(yōu)化
    主鍵設(shè)置 數(shù)據(jù)去重 數(shù)據(jù)傾斜
    GC參數(shù)
    jobmanager參數(shù)

image.png

堆棧
failover信息補全,需要到j(luò)ob mamaner 中看更詳細(xì)的日志

  • 建立指標(biāo)系統(tǒng)
    延遲和吞吐是flink最重要的指標(biāo)
    tps 每秒有多少數(shù)據(jù)進(jìn)入系統(tǒng) 消費是否能跟上生產(chǎn)
  • 如何查看日志
    yarn的container 日志和查看jobmanamger taskmanager 的日志
1588821660971.png
image.png
image.png
image.png

參考
https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/mem_setup.html
https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
https://blog.csdn.net/nazeniwaresakini/article/details/104220120?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栗柒,一起剝皮案震驚了整個濱河市礁扮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞬沦,老刑警劉巖太伊,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逛钻,居然都是意外死亡僚焦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門曙痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芳悲,“玉大人,你說我怎么就攤上這事屡江“鸥牛” “怎么了赛不?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵惩嘉,是天一觀的道長。 經(jīng)常有香客問我踢故,道長文黎,這世上最難降的妖魔是什么惹苗? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮耸峭,結(jié)果婚禮上桩蓉,老公的妹妹穿的比我還像新娘。我一直安慰自己劳闹,他們只是感情好院究,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本涕,像睡著了一般业汰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菩颖,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天样漆,我揣著相機(jī)與錄音,去河邊找鬼晦闰。 笑死放祟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呻右。 我是一名探鬼主播跪妥,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼声滥!你這毒婦竟也來了骗奖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醒串,失蹤者是張志新(化名)和其女友劉穎执桌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芜赌,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仰挣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缠沈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膘壶。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洲愤,靈堂內(nèi)的尸體忽然破棺而出颓芭,到底是詐尸還是另有隱情,我是刑警寧澤柬赐,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布亡问,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏州藕。R本人自食惡果不足惜束世,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望床玻。 院中可真熱鬧毁涉,春花似錦、人聲如沸锈死。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽待牵。三九已至严嗜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洲敢,已是汗流浹背漫玄。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留压彭,地道東北人睦优。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像壮不,于是被迫代替她去往敵國和親汗盘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355