如何监控 Bolt 的待处理队列的大小?

How to monitor the size of Bolt's pending queues?

我的拓扑有一两个瓶颈。 Storm 中的容量指标 UI 可用于识别这些,但我对 Bolt 队列的大小更感兴趣。

我的理解是每个bolt都有两个队列,一个用于等待执行的元组,另一个用于等待发射的元组。是否可以监控这些队列的大小?

我在网上找到了一些关于向 Bolts 添加 ITaskHook 实现的资料,但我并不清楚如何使用它来监控队列大小。 ITaskHook中的方法可以用来监控吗?

您应该能够使用 metrics 机制查看拓扑组件的队列长度。一种简单的方法是将 conf.registerMetricsConsumer(LoggingMetricsConsumer.class) 添加到拓扑的配置中。

这是我的一个组件得到的示例

4:fetch __sendqueue {write_pos=12122, read_pos=12122, capacity=1024, population=0} 4:fetch __receive {write_pos=8588, read_pos=8587, capacity=1024, population=1}