【发布时间】:2019-03-09 23:08:34
【问题描述】:
Version Info:
"org.apache.storm" % "storm-core" % "1.2.1"
"org.apache.storm" % "storm-kafka-client" % "1.2.1"
我正在创建和试验我创建的 Storm 拓扑,它有 4 个螺栓和一个 kafka spout。
我试图调整这些螺栓的并行性、最大喷口挂起等配置,以查看我可以从中获得多少规模。经过一些配置配置/结果如下所示:
max-spout-pending: 1200
Kafka Spout Executors: 10
Num Workers: 10
+----------+-------------+----------+----------------------+
| boltName | Parallelism | Capacity | Execute latency (ms) |
+----------+-------------+----------+----------------------+
| __acker | 10 | 0.008 | 0.005 |
| bolt1 | 15 | 0.047 | 0.211 |
| bolt2 | 150 | 0.846 | 33.151 |
| bolt3 | 1500 | 0.765 | 289.679 |
| bolt4 | 48 | 0.768 | 10.451 |
+----------+-------------+----------+----------------------+
进程延迟和执行延迟几乎相同。 Bolt 3 中涉及一个 HTTP 调用,它花费了大约相同的时间,并且 Bolt 2 和 Bolt 4 也在执行一些 I/O 操作。
虽然我可以看到每个 bolt 可以单独处理超过 3k,(bolt3:1500/289.679ms = 5.17k qps,bolt4:48/10.451ms = 4.59k qps 等等),但总体而言,此拓扑正在处理元组只有 ~3k qps。我在 10 个盒子上运行它(所以每个盒子一个工人),有 12 个核心 CPU 和 32GB RAM。我已经给每个工作进程 -xms 8Gb 和 -xmx 10Gb,所以 RAM 也不应该受到限制。我看到 GC 也正常发生,每分钟 4 次 GC 大约需要 350 毫秒的总时间(来自 1 分钟工作进程的飞行记录)。
我看到Complete Latency 每个元组大约需要 4 秒,这是我无法理解的,因为如果我计算所有螺栓所花费的所有时间,它大约是 334 毫秒,但正如提到的 here ,元组可以在缓冲区中等待,它建议增加dop(并行度),我已经这样做并达到了上述状态。
我增加了一些计量,我发现元组从 Bolt 2 到 Bolt 3 平均需要大约 1.3 秒,从 Bolt 3 到 Bolt 4 需要 5 秒。虽然我知道 Storm 可能会将它们保持在出站或入站缓冲区,我的问题是如何减少它,因为这些螺栓应该能够在一秒钟内处理更多元组,就像我之前的计算一样,是什么阻止它们以更快的速度进入和处理?
【问题讨论】:
标签: apache-storm