Flink非對齊checkpoint原理(Flink Unaligned Checkpoint)
為什么提出Unaligned Checkpoint(UC)?
因為反壓嚴重時會導(dǎo)致Checkpoint失敗,可能導(dǎo)致如下問題
- 恢復(fù)時間長-服務(wù)效率低
- 非冪等和非事務(wù)會導(dǎo)致數(shù)據(jù)重復(fù)
- 持續(xù)反壓導(dǎo)致任務(wù)加入死循環(huán)(可能導(dǎo)致數(shù)據(jù)丟失,例如超過kafka的過期時間無法重置offset)
UC的原理
UC有兩個階段(UC主要是快速超越buffer data)
-
第一階段:UC同步階段(任意一個barrier加入緩沖區(qū)即開始UC,barrier 直接超越所有input和outputBuffer(算子暫停處理數(shù)據(jù)))
- barrier超越
- 對buffer進行引用
- 調(diào)用算子snapshot state
- 引用state
-
第二階段:異步階段(等待所有input channel的barrier都到達)
- 寫算子的state(同步階段引用的state)
- 同步階段引用的input&output buffer
- 寫其它inputChannel Barrier之前的buffer(如下圖中藍色f和G)
- 匯報給jobmanager
UC已進行的優(yōu)化
Task原理
Task處理邏輯如下,線程可能卡在結(jié)果輸出影響UC
優(yōu)化一
優(yōu)化:判斷有空閑output buffer再處理數(shù)據(jù)
需要多個buffer時還是會卡住,比如flatmap操作
優(yōu)化二
優(yōu)化:使用OverDraft Buffer透支Buffer,一旦透支buffer則不能處理數(shù)據(jù)(1.16已有透支Buffer功能)
其它優(yōu)化
優(yōu)化:Legacy Source(Legacy Source 是 Flink 中的一種數(shù)據(jù)源,它是在 Flink 1.0 版本中引入的,并在后續(xù)版本中被視為過時的來源)兼容UC
小結(jié)
- 等待空閑Buffer+引入透支overdraft Buffer解決卡頓問題
- Legacy source兼容等待空閑Buffer邏輯
UC風(fēng)險
- 序列化不兼容,無法重啟
- 算子連接變化UC無法恢復(fù)
- Data Buffer會寫大量小文件,導(dǎo)致DataNode壓力過大
- 使用Task共享文件(execution.checkpointing.channel-state.number-of-tasks-share-file)
- 會出現(xiàn)死鎖或內(nèi)存泄漏
UC&AC對比
優(yōu)化:在AC超時自動切換到UC(1.11版本開始)
配置方法(1.11以后版本)文章來源:http://www.zghlxwxcb.cn/news/detail-621483.html
execution.checkpointing.aligned-checkpoint.timeout: 10m
execution.checkpointing.unaligned-checkpoint.enabled: true
參考文檔
https://www.bilibili.com/video/BV1tR4y1y7gQ/?spm_id_from=…search-card.all.click&vd_source=a52a4a5afaf8d47cb48d828c7e22e5f1文章來源地址http://www.zghlxwxcb.cn/news/detail-621483.html
到了這里,關(guān)于Flink非對齊checkpoint原理(Flink Unaligned Checkpoint)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!