我正在使用雅虎的这个工具对我进行一些性能测试 风暴 </跨度> 集群 -https://github.com/yahoo/ 风暴 </跨度> -perf测试
我注意到,当我打开 时,我的性能几乎达到了10倍。以下是重现测试的一些细节 -集群 -3个管理节点和1个nimbus节点。每个节点都是c3.large。
随着acking -
斌/ 风暴 </跨度> jar storm_perf_test-1.0.0-SNAPSHOT-jar-with
在启用acking的情况下,性能始终会有一定程度的降低 - 这是您为可靠性付出的代价。禁用禁用时吞吐量总是会更高,但您无法保证数据是否在地板上处理或丢弃。无论是你所看到的10倍,还是显着更低,都是一个调整问题。
一个重要的设置是 topology.max.spout.pending ,它允许你限制喷口,以便在任何给定时间只允许“飞行中”那么多元组。该设置对于确保下游螺栓不会不堪重负并开始计时元组非常有用。
topology.max.spout.pending
该设置对禁用禁用也没有影响 - 就像打开泛滥门并丢弃溢出的数据一样。再说一遍,它总会更快。
启用acking后,Storm会确保所有内容至少处理一次,但您需要调整 topology.max.spout.pending 适合您的用例。由于每个用例都不同,这是一个反复试验的问题。设置得太低,您的吞吐量会很低。设置得太高,你的下游螺栓会不堪重负,元组会超时,你会得到重播。
为了说明,设置 maxSpoutPending 到1再次运行基准测试。然后尝试1000。
maxSpoutPending
所以,如果没有适当的调整,可能会有10倍的性能提升。如果数据丢失适用于您的用例,请关闭acking。但是,如果您需要可靠的处理,请将其打开,针对您的用例进行调整,并水平扩展(添加更多节点)以满足您的吞吐量要求。