【发布时间】:2015-11-27 01:59:07
【问题描述】:
我一直在阅读有关 apache Storm 尝试了一些来自storm-starter 的示例。还了解了如何调整拓扑以及如何扩展它以足够快地执行以满足所需的吞吐量。
我创建了启用 acking 的示例拓扑,我能够实现每秒 3K-5K 消息处理。它在最初的 10 到 15 分钟或大约 100 万到 200 万条消息中执行得非常快,然后开始减速。在storm UI上,我可以看到整体延迟开始逐渐上升并且没有回来,一段时间后处理下降到每秒只有几百个。对于我尝试过的所有类型,我都得到了完全相同的行为,最简单的一种是使用 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
【问题讨论】:
-
解释为什么它被否决,以便我可以改进..
-
可以发一些storm UI截图吗?
-
在帖子中添加了屏幕截图,在可视化 vm 线程监视器中观察到大部分 Transformer 螺栓线程处于停放、等待或监视状态,很少有人在运行。此外,大多数线程正在运行,但在一段时间内进入等待或停放状态。无法找出原因?
-
Transformation bolt 会根据条件过滤消息,因此不要因为看到 RT_LEFT_BOLT 的发射次数减少而感到困惑。只有 2% 的消息会通过此用例的过滤条件。
标签: apache-storm