flink standalone和yarn如何選擇


結論:生產環境推薦使用yarn方式部署

 

使用standalone遇到的問題

1) 同一個standalone cluster中的job相互搶占資源,而standalone cluster的模式僅僅只能通過task slot在task manager的堆內內存上做到資源隔離。同時由於前文提到過的Flink在standalone cluster中deploy job的方式本來就會造成資源分配不均衡,從而會導致App Analytics線流量大時而引起Game Analytics線淤積的問題;

2) 我們的source operator的並行度等同於所消費Kafka topic的partition數量,而中間做etl的operator的並行度往往會遠大於Kafka的partition數量。因此最后的job graph不可能完全被鏈成一條operator chain,operator之間的數據傳輸必須通過Flink的network buffer的申請和釋放,而1.1.x 版本的network buffer在數據量大的時候很容易在其申請和釋放時造成死鎖,而導致Flink明明有許多消息要處理,但是大部分線程處於waiting的狀態導致業務的大量延遲。

Standalone模式下job的deploy與資源隔離共享

結合我們之前的使用經驗,Flink的standalone cluster在發布具體的job時,會有一定的隨機性。舉個例子,如果當前集群總共有2台8核的機器用以部署TaskManager,每台機器上一個TaskManager實例,每個TaskManager的TaskSlot為8,而我們的job的並行度為12,那么就有可能會出現下圖的現象:

第一個TaskManager的slot全被占滿,而第二個TaskManager只使用了一半的資源!資源嚴重不平衡,隨着job處理的流量加大,一定會造成TM1上的task消費速度慢,而TM2上的task消費速度遠高於TM1的task的情況。假設業務量的增長迫使我們不得不擴大job的並行度為24,並且擴容2台性能更高的機器(12核),在新的機器上,我們分別部署slot數為12的TaskManager。經過擴容后,集群的TaskSlot的占用可能會形成下圖:

新擴容的配置高的機器並沒有去承擔更多的Task,老機器的負擔仍然比較嚴重,資源本質上還是不均勻!

除了standalone cluster模式下job的發布策略造成不均衡的情況外,還有資源隔離差的問題。因為我們在一個cluster中往往會部署不止一個job,而這些job在每台機器上都共用JVM,自然會造成資源的競爭。起初,我們為了解決這些問題,采用了如下的解決方法:

  1. 將TaskManager的粒度變小,即一台機器部署多個實例,每個實例持有的slot數較少;
  2. 將大的業務job隔離到不同的集群上。

這些解決方法增加了實例數和集群數,進而增加了維護成本。因此我們決定要遷移到on yarn上,目前看Flink on yarn的資源分配和資源隔離確實比standalone模式要優秀一些。

 

原文鏈接:https://segmentfault.com/a/1190000020209179


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM