1. 程式人生 > >Storm排錯調優之Spout拉取造成記憶體溢位(OOM)

Storm排錯調優之Spout拉取造成記憶體溢位(OOM)

                                                               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);