风暴,任何记录飞行中有多少元组的方法?

时间:2015-10-13 01:26:24

标签: apache-storm

作为调整的一部分,我一直在调整maxSpoutPending参数。但是,随时了解拓扑中有多少​​元组会很好,所以我可以知道这个参数对拓扑性能的影响有多大。

我在源头挖了但没找到任何东西。这是我在Storm UI中可以找到的值吗?或者我可以在某处覆盖某些东西来记录这个值?

3 个答案:

答案 0 :(得分:1)

这取决于你的意思"拓扑中有多少​​元组"。

  1. 如果你想知道鲸鱼喷出的多少元组还没有被完全处理,你可以简单地区分" Spout发射的" " Spout acked"来自Storm UI(您也可以通过client.getTopologyInfo("topolgoyName")client = NimbusClient.getConfiguredClient(...)
  2. 获取这些值)
  3. 如果你想知道拓扑中所有阶段的所有元组(即每个喷口/螺栓的所有缓冲区),它可能非常棘手...... TopologyInfo可能仍然有用,但我是不确定是否/如何计算您想知道的值。

答案 1 :(得分:1)

您说您正在寻找有关maxTuplesPending属性有效性的见解。

使用Storm提供的KafkaSpout(我已修改源代码以添加更多日志记录以查看正在发生的事情)next()方法一直被调用(< 1ms)。所以我总是看到相对快速的转换(< 1ms)从一个元组获得ack'd或失败(减少MaxPending计数)和一个新的元组被发送到拓扑(再次达到MaxPending计数)。今天的日志显示了一个元组获取确认后的时间戳,然后另一个被发送出去。

2015-10-16T12:20:15.162-0500 s.k.PartitionManager [INFO] PM! 6 - ack
2015-10-16T12:20:15.163-0500 s.k.PartitionManager [INFO] PM! 177 - next

2015-10-16T12:20:15.400-0500 s.k.PartitionManager [INFO] PM! 10 - ack
2015-10-16T12:20:15.401-0500 s.k.PartitionManager [INFO] PM! 178 - next

2015-10-16T12:20:15.649-0500 s.k.PartitionManager [INFO] PM! 22 - ack
2015-10-16T12:20:15.649-0500 s.k.PartitionManager [INFO] PM! 180 - next

2015-10-16T12:20:16.511-0500 s.k.PartitionManager [INFO] PM! 27 - ack
2015-10-16T12:20:16.512-0500 s.k.PartitionManager [INFO] PM! 182 - next 

这显示了相当即时的转变。因此,对于我的用例,拓扑中的元组几乎总是有maxPending计数。

我的元组也不会很快得到处理(约1秒),因此对于处理速度更快或者不同类型的Spouts的元组我不能说。

答案 2 :(得分:0)

鉴于您的喷口中有足够的消息,您可以强制喷口从头开始读取,并查看您可以在10分钟内处理多少元组。 (使用基本数学,您可以获得每秒的元组数)。

例如,使用kafka喷口,您可以执行以下操作:

        SpoutConfig spoutConfig = new SpoutConfig(
          // your spout config
         );   
    spoutConfig.forceFromStart = true; // this is how you tell the spout to read from the oldest kafka offset
    KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);

然后让拓扑运行15分钟,看看拓扑在过去10分钟内处理了多少个元组。