我正在使用雅虎的这个工具在我的风暴群集上运行一些性能测试 - https://github.com/yahoo/storm-perf-test
我注意到,当我开始选择时,我的性能几乎达到了10倍。以下是重现测试的一些细节 - 集群 - 3个管理节点和1个nimbus节点。每个节点都是c3.large。
使用acking -
bin / storm jar storm_perf_test-1.0.0-SNAPSHOT-jar-with-dependencies.jar com.yahoo.storm.perftest.Main --ack --boltParallel 60 --maxSpoutPending 100 --messageSizeByte 100 --name some -topo --numWorkers 9 --spoutParallel 20 --testTimeSec 100 --pollFreqSec 20 --numLevels 2
status topologies totalSlots slotsUsed totalExecutors executorsWithMetrics time time-diff ms transferred throughput (MB/s)
WAITING 1 3 0 141 0 1424707134585 0 0 0.0
WAITING 1 3 3 141 141 1424707154585 20000 24660 0.11758804321289062
WAITING 1 3 3 141 141 1424707174585 20000 17320 0.08258819580078125
RUNNING 1 3 3 141 141 1424707194585 20000 13880 0.06618499755859375
RUNNING 1 3 3 141 141 1424707214585 20000 21720 0.10356903076171875
RUNNING 1 3 3 141 141 1424707234585 20000 43220 0.20608901977539062
RUNNING 1 3 3 141 141 1424707254585 20000 35520 0.16937255859375
RUNNING 1 3 3 141 141 1424707274585 20000 33820 0.16126632690429688
没有acking -
bin / storm jar~ / target / storm_perf_test-1.0.0-SNAPSHOT-jar-with-dependencies.jar com.yahoo.storm.perftest.Main --boltParallel 60 --maxSpoutPending 100 --messageSizeByte 100 --name some-topo --numWorkers 9 --spoutParallel 20 --testTimeSec 100 --pollFreqSec 20 --numLevels 2
status topologies totalSlots slotsUsed totalExecutors executorsWithMetrics time time-diff ms transferred throughput (MB/s)
WAITING 1 3 0 140 0 1424707374386 0 0 0.0
WAITING 1 3 3 140 140 1424707394386 20000 565460 2.6963233947753906
WAITING 1 3 3 140 140 1424707414386 20000 1530680 7.298851013183594
RUNNING 1 3 3 140 140 1424707434386 20000 3280760 15.643882751464844
RUNNING 1 3 3 140 140 1424707454386 20000 3308000 15.773773193359375
RUNNING 1 3 3 140 140 1424707474386 20000 4367260 20.824718475341797
RUNNING 1 3 3 140 140 1424707494386 20000 4489000 21.40522003173828
RUNNING 1 3 3 140 140 1424707514386 20000 5058960 24.123001098632812
最后两列是非常重要的。它显示传输的元组数和以MBps为单位的速率。
当我们打开acking时,这种性能是否会受到风暴的影响?我使用的是0.9.3版本,没有高级网络。
答案 0 :(得分:4)
在启用acking的情况下,性能始终会有一定程度的降低 - 这是您为可靠性付出的代价。禁用禁用时吞吐量总是会更高,但您无法保证数据是否在地板上处理或丢弃。无论是你所看到的10倍,还是显着更低,都是一个调整问题。
一个重要的设置是topology.max.spout.pending
,它允许你限制spouts,以便在任何给定时间只允许“飞行中”那么多元组。该设置对于确保下游螺栓不会不堪重负并开始计时元组非常有用。
该设置对禁用禁用也没有影响 - 就像打开泛光门并丢弃任何溢出的数据一样。所以,它总是会更快。
启用acking后,Storm会确保所有内容至少处理一次,但您需要根据用例适当调整topology.max.spout.pending
。由于每个用例都不同,这是一个反复试验的问题。设置得太低,您的吞吐量会很低。设置得太高,你的下游螺栓会不堪重负,元组会超时,你会得到重播。
为了说明,将maxSpoutPending
设置为1并再次运行基准测试。然后尝试1000.
所以是的,如果没有适当的调整,可能会有10倍的性能提升。如果数据丢失适用于您的用例,请关闭acking。但是,如果您需要可靠的处理,请打开它,调整用例,并水平扩展(添加更多节点)以达到您的吞吐量要求。