【发布时间】:2019-07-05 01:27:13
【问题描述】:
我的拓扑从 Kafka 中读取,并对外部系统进行 HTTP 调用。 Kafka 中的摄取速率约为每秒 200 条消息。外部系统仅支持每秒 20 个 HTTP 调用。我怎样才能引入节流,使进行 HTTP 调用的 Bolt 每秒只处理 20 条消息?
【问题讨论】:
标签: apache-storm
我的拓扑从 Kafka 中读取,并对外部系统进行 HTTP 调用。 Kafka 中的摄取速率约为每秒 200 条消息。外部系统仅支持每秒 20 个 HTTP 调用。我怎样才能引入节流,使进行 HTTP 调用的 Bolt 每秒只处理 20 条消息?
【问题讨论】:
标签: apache-storm
您可以使用 topology.max.spout.pending 设置根据拓扑中正在运行的元组数量来限制 spout。该设置是每个 spout 实例,所以如果你有例如10 个 spout 执行器,您设置最多 100 个元组,您将在拓扑中获得最多 1000 个元组。
您可以在OutputCollector 上使用resetTimeout 方法来防止要推迟的元组因超时而失败。
话虽如此,您可能需要将您的消息打包成更大的包。如果你每秒只能处理 20 条消息,而你每秒有 200 条的输入,你就会开始落后,永远追不上。
【讨论】: