作为调整的一部分,我一直在调整maxSpoutPending
参数。但是,随时了解拓扑中有多少元组会很好,所以我可以知道这个参数对拓扑性能的影响有多大。
我在源头挖了但没找到任何东西。这是我在Storm UI中可以找到的值吗?或者我可以在某处覆盖某些东西来记录这个值?
答案 0 :(得分:1)
这取决于你的意思"拓扑中有多少元组"。
client.getTopologyInfo("topolgoyName")
(client = NimbusClient.getConfiguredClient(...)
。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分钟内处理了多少个元组。