在我的处理时窗口字数拓扑中,输入速率为2000元组/秒。我的count_bolt的窗口大小是3s和1s滞后。从UI可以看出,有大量失败的元组。通过查看日志,元组失败的原因是超时。我还将TOPOLOGY_MAX_SPOUT_PENDING
设置为10000,topology.message.timeout.secs
设置为60。并且根据图中的Capacity
和Execute latency
两个参数,螺栓的平行度应足够。
问:我应该如何调整参数?例如TOPOLOGY_MAX_SPOUT_PENDING
,topology.message.timeout.secs
或其他名称。
这是我的风暴用户界面的图片: storm UI
答案 0 :(得分:0)
我将从降低topology.max.spout.pending
开始。一旦您的拓扑结构不能无用地处理已经超时的元组,那么应该更容易分辨瓶颈所在。
请记住,容量/执行延迟仅考虑到每个元组在execute
中花费了多少时间。
我记得Kafka螺栓不会在离开execute
之前确认元组,而是将元组传递给生产者,并通过生产者的回调来确认元组,这可能在{{1}之后发生}返回。结果,您不会在容量/执行延迟中看到在Kafka螺栓中处理元组所花费的实际时间。您可以看到元组到达execute
到元组在进程延迟中得到确认之间的实际时间,这是相当高的。
您的count_bolt进程延迟也很高,因此请查看在确认元组之前是否也在缓冲元组。