达到Apache Storm的极限

时间:2015-07-10 08:36:25

标签: apache-storm low-latency stream-processing

我们正在尝试使用 Apache Storm 实现一个Web应用程序。

申请接收大量广告请求( 100 TPS - 一百次交易/秒),对其进行一些简单的计算,然后将存储结果存储在NoSQL数据库中,最大延迟为10 ms

我们使用 Cassandra 作为其写作功能的接收器。

但是,我们已经超越了 8 ms 要求,我们处于 100ms

我们尝试使用螺栓的并行性来最小化缓冲区(Disruptor缓冲区)的大小并平衡拓扑。

但我们仍然在 20ms

对于4名工作人员(8核/ 16GB),我们处于 20k TPS ,这仍然非常低。

是否有任何优化建议或是否我们刚刚达到Apache Storm的限制(Java的限制)?

2 个答案:

答案 0 :(得分:2)

在低延迟和高吞吐量之间进行权衡。

如果你真的需要高吞吐量,你应该依靠批量调整更大的缓冲区大小,或者使用Trident。

尽量避免向其他工作人员传输元组有助于降低延迟。 (localOrShuffleGrouping)

请不要忘记监控导致世界停止的GC。如果您需要低延迟,则应将其最小化。

答案 1 :(得分:2)

我不知道您正在使用的平台,但在C ++中 10ms是永恒的。我认为你正在使用错误的工具。

使用C ++,提供一些本地查询应该不到一微秒。

触及多个内存位置和/或必须等待磁盘或网络I / O的非本地查询别无选择,只能花费更多时间。在这种情况下,并行性是你最好的朋友。

你必须找到瓶颈。

  1. 是I / O吗?
  2. 是CPU吗?
  3. 是内存带宽吗?
  4. 是内存访问时间吗?
  5. 找到瓶颈之后,您可以改进它,异步它和/或乘以(=并行化)它。