Apache storm 暴风雪,有没有办法记录飞行中有多少元组?

Apache storm 暴风雪,有没有办法记录飞行中有多少元组?,apache-storm,Apache Storm,作为调优的一部分,我一直在调整maxpoutpending参数。但是,最好知道拓扑中随时有多少元组,这样我就可以知道这个参数对拓扑的性能有多大的影响 我翻遍了源头,但什么也没找到。这是我可以在Storm UI中找到的值吗?或者我可以在某个地方重写某些内容来记录此值?如果您的喷口中有足够的消息,您可以强制喷口从头开始读取,并查看您可以在10分钟内处理多少元组。(使用基本数学,您可以获得每秒的元组数) 例如,使用卡夫卡喷口,可以执行以下操作: SpoutConfig spoutCon

作为调优的一部分,我一直在调整
maxpoutpending
参数。但是,最好知道拓扑中随时有多少元组,这样我就可以知道这个参数对拓扑的性能有多大的影响


我翻遍了源头,但什么也没找到。这是我可以在Storm UI中找到的值吗?或者我可以在某个地方重写某些内容来记录此值?

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

例如,使用卡夫卡喷口,可以执行以下操作:

        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分钟内处理了多少元组

这取决于“拓扑中有多少元组”的含义

  • 如果您想知道喷口发出的元组有多少尚未完全处理,您可以简单地从Storm UI中获取“喷口发出”和“喷口确认”的差异(您也可以通过
    client.getTopologyInfo(“topolgoyName”)
    (使用
    client=NimbusClient.getConfiguredClient(…)
  • 如果您想知道拓扑中所有阶段的所有元组(即,每个喷口/螺栓的所有缓冲区中的所有元组),这可能非常棘手……
    TopologyInfo
    可能仍然有用,但我不确定是否/如何计算您想知道的值

  • 您说过您希望了解maxTuplesPending属性的有效性


    使用Storm提供的KafkaSpout(我修改了源代码以添加更多日志记录以查看发生了什么),next()方法一直被调用(谢谢,这是一个很好的建议,不过我应该更清楚。我可以测量拓扑的吞吐量,也可以测量maxTuplesPending对吞吐量的影响。但我希望深入了解maxTuplesPending属性的有效性。具体来说,这些更改对随时“飞行中的元组数”。
    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