Storm排錯調優之Spout拉取造成記憶體溢位(OOM)
阿新 • • 發佈:2018-12-14
Storm排錯調優之Spout拉取造成記憶體溢位
原因分析:
Storm框架的兩個元件spout和bolt,由於Spout從Kafka拉取訊息,bolt用於處理。一般情況下,處理速度低於拉取速度,導致bolt處理消耗資源過多。最終造成記憶體溢位。
解決方案:
1.合理設定maxSpoutPengding的值。
當前設定為100 也就是p為100,nunm-tasks為1。
所以RotatingMap的最大個數限制為100。
由於之前未設定MaxSpoutPengding,spout產生新的tuple就會立即向後端傳遞,topo過載嚴重導致OOM。
設定為100 ,此時storm會暫停傳送tuple,直到發出去的tuple小於這個數字,起到對spout限速的作用。
2.合理設定message.timeout.secs
這個配置設定了一個Tuple數需要應答的最大時間秒數限制,也就是超過這個時間就已經被認為失敗,可能導致stormUI頁面spout failed 。這個值設定的太小可能會導致tuple反覆重新發送。
預設值為30s
程式碼設定引數:
Config config = topoConfig.buildStormTopoConfig(); config.setMaxSpoutPending(100); config.setMessageTimeoutSecs(60);