storm 提升运行速度

(1)要将系统中的算法调优。有可能一个算法浪费了一小部分时间,但因为数据量可能比较大,以致于总体上1秒的时间内可能浪费大量的时间。所以,算法的设计仍是比较重要的。算法

(2)其次,就是调整系统中占用资源比较多、运算速度比较慢的那些spout和bolt。在进行topology设计时须要设计好每一个bolt的并行度。对于运行速度比较慢的bolt,须要调大他们的并行度,是得更多的资源用到这些计算上面来。这里,bolt运行的快慢是能够从ui界面中看到的,以下图:ui

如上图,其中,capacity表示一种容量,其实就是占用的资源的百分比。好比,0.799就表示占用了79.9%的分配给这个bolt的资源。这个数值越大,则表示的处理起来速度越慢,则更要加大它的并行度。线程

(3)而后就是设置acker的数量。acker是在bolt成功处理后,进行ack调用的线程(仍是进程,我忘记了)。当数据量比较大时,须要使用这个线程的次数就比较多,所以有可能这个线程就是制约处理速度的因素。所以,能够适当调大acker的数量,用于进行ack的调用。系统中,若是不设置的话,acker的数量默认为1;能够经过如下语句在topology中进行设定:设计

conf.put(Config.TOPOLOGY_ACKER_EXECUTORS, 10);//设置acker的数量

(4)当集群中数据量比较大时,则最好能设置spout中的等待处理的数据量的大小。当集群中等待的数据量比较大时,也就是数据发送比较快,可是处理太慢。这个时候应该阻止spout的发送,不然可能会致使系统队列爆掉。所以,设置如下:code

conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 10000);//设置一个spout task上面最多有多少个没有处理的tuple(没有ack/failed)回复,以防止tuple队列爆掉

(5)在Spout调用nextTuple方法时,若是没有emit tuple,那么默认须要休眠1ms,这个具体的策略是可配置的,所以能够根据本身的具体场景,进行设置,以达到合理利用cpu资源。orm

topology.spout.wait.strategy "backtype.storm.spout.SleepSpoutWaitStrategy"
topology.sleep.spout.wait.strategy.time.ms       1
相关文章
相关标签/搜索