Apache Storm:由于超时,KafkaSpout有很多失败的元组

时间:2018-11-23 07:34:18

标签: apache-kafka apache-storm

在我的处理时窗口字数拓扑中,输入速率为2000元组/秒。我的count_bolt的窗口大小是3s和1s滞后。从UI可以看出,有大量失败的元组。通过查看日志,元组失败的原因是超时。我还将TOPOLOGY_MAX_SPOUT_PENDING设置为10000,topology.message.timeout.secs设置为60。并且根据图中的CapacityExecute latency两个参数,螺栓的平行度应足够。

问:我应该如何调整参数?例如TOPOLOGY_MAX_SPOUT_PENDINGtopology.message.timeout.secs或其他名称。

这是我的风暴用户界面的图片: storm UI

1 个答案:

答案 0 :(得分:0)

我将从降低topology.max.spout.pending开始。一旦您的拓扑结构不能无用地处理已经超时的元组,那么应该更容易分辨瓶颈所在。

请记住,容量/执行延迟仅考虑到每个元组在execute中花费了多少时间。

我记得Kafka螺栓不会在离开execute之前确认元组,而是将元组传递给生产者,并通过生产者的回调来确认元组,这可能在{{1}之后发生}返回。结果,您不会在容量/执行延迟中看到在Kafka螺栓中处理元组所花费的实际时间。您可以看到元组到达execute到元组在进程延迟中得到确认之间的实际时间,这是相当高的。

您的count_bolt进程延迟也很高,因此请查看在确认元组之前是否也在缓冲元组。