风暴拓扑处理逐渐减缓

时间:2015-09-13 01:28:44

标签: apache-storm

我一直在读关于apache的风暴尝试了几个来自风暴启动器的例子。还了解了如何调整拓扑以及如何对其进行扩展以快速执行以满足所需的吞吐量。

我创建了启用了acking的示例拓扑,我能够实现每秒3K-5K的消息处理。它在最初的10到15分钟或大约1mil到2mil的消息中执行得非常快,然后它开始减速。在风暴用户界面上,我可以看到整体延迟开始逐渐上升并且没有回来,一段时间后处理下降到只有几百秒。对于我尝试的所有类型,我得到了完全相同的行为,最简单的是使用KafkaSpout从kafka读取并将其发送到变换bolt解析msg并使用KafkaBolt再次将其发送到kafka。解析器非常快,因为解析消息所需的时间不到一毫秒。我尝试了几种增加/描述并行性,改变缓冲区大小等但同样行为的选项。请帮我找出拓扑逐渐缓慢的原因。这是我正在使用的配置

1 Nimbus machine (4 CPU) 24GB RAM
2 Supervisor machines (8CPU) and using 1 thread per core with 24GB RAM
4 Node kafka cluster running on above 2 supervisor machines (each topic has 4 partitions)

KafkaSpout(2 parallelism)-->TransformerBolt(8)-->KafkaBolt(2)

topology.executor.receive.buffer.size: 65536
topology.executor.send.buffer.size: 65536
topology.spout.max.batch.size: 65536
topology.transfer.buffer.size: 32
topology.receiver.buffer.size: 8
topology.max.spout.pending: 250

一开始 enter image description here enter image description here

几分钟后 enter image description here enter image description here

45分钟后 - 延迟开始上升 enter image description here enter image description here

80分钟后 - 延迟将继续上升,到达8到10mil消息时将持续到100秒 enter image description here enter image description here

Visual VM截图 enter image description here enter image description here

线程 enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

注意RT_LEFT_BOLT上的apache-mime4j-0.6.jar httpmime-4.0.1.jar picasso.jar and so on.. 指标,它非常接近1;这解释了为什么拓扑结构变慢了。

来自Storm documentation

  

Storm UI也变得非常有用。所有螺栓都有新的统计数据“#executed”,“执行延迟”和“容量”。 “容量”指标非常有用,它可以告诉您最后10分钟内螺栓执行元组的时间百分比。如果此值接近1,则螺栓处于“容量”状态,并且是拓扑中的瓶颈。容量螺栓的解决方案是增加螺栓的平行度。

因此,您的解决方案是向该给定的螺栓(RT_LEFT_BOLT)添加更多执行程序(和任务)。您可以做的另一件事是减少RT_RIGHT_BOLT上的执行程序数量,容量表明您不需要那么多执行程序,可能1或2可以完成这项工作。

答案 1 :(得分:0)

问题是由于使用newgen参数进行GC设置,它没有完全使用已分配的堆,因此内部风暴队列变满并且内存不足。奇怪的是风暴没有丢失内存错误,它只是停滞不前,在视觉vm的帮助下我能够追踪它。