首页 > 解决方案 > Apache Storm:KafkaSpout 有很多因超时而失败的元组

问题描述

在我的 processtime-window wordcount 拓扑中,输入速率是 2000 tuple/s。我的 count_bolt 的窗口大小是 3s 和 1s 滞后。从 UI 可以看出有大量的失败元组。通过查看日志,元组失败的原因是超时。我也设置TOPOLOGY_MAX_SPOUT_PENDING为10000,<code>topology.message.timeout.secs 为60。根据图中Capacity和的两个参数Execute latency,bolt的并行度应该足够了。

问:我应该如何调整参数?比如,TOPOLOGY_MAX_SPOUT_PENDING<code>topology.message.timeout.secs 或者别的什么。

这是我的storm UI的图片: storm UI

标签: apache-kafkaapache-storm

解决方案


我会先降低topology.max.spout.pending. 一旦您的拓扑不会无用地处理已经超时的元组,就应该更容易判断瓶颈在哪里。

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

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

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


推荐阅读