Apache storm ApacheStorm:基于配置的节流喷口

Apache storm ApacheStorm:基于配置的节流喷口,apache-storm,Apache Storm,我的拓扑从Kafka读取,并对外部系统进行HTTP调用。卡夫卡的接收速率约为每秒200条信息。外部系统每秒仅支持20个HTTP调用。如何引入节流,使HTTP调用的插销每秒仅处理20条消息?您可以使用拓扑.max.spout.pending设置,根据拓扑中飞行的元组数对spout进行节流。该设置是针对每个喷口实例的,因此,如果您有10个喷口执行器,并且设置了最大100个元组,则拓扑中的最大元组数将为1000个 您可以使用OutputCollector上的resetTimeout方法来防止要延迟的元

我的拓扑从Kafka读取,并对外部系统进行HTTP调用。卡夫卡的接收速率约为每秒200条信息。外部系统每秒仅支持20个HTTP调用。如何引入节流,使HTTP调用的插销每秒仅处理20条消息?

您可以使用
拓扑.max.spout.pending
设置,根据拓扑中飞行的元组数对spout进行节流。该设置是针对每个喷口实例的,因此,如果您有10个喷口执行器,并且设置了最大100个元组,则拓扑中的最大元组数将为1000个

您可以使用
OutputCollector
上的
resetTimeout
方法来防止要延迟的元组因超时而失败


话虽如此,您可能需要将消息打包成更大的包。如果您每秒只能处理20条消息,而您的输入为每秒200条,那么您将开始落后,永远赶不上进度。

我会收到突发请求,必须以每秒20条消息的速度进行中继。因此,迎头赶上不是问题。如何确保螺栓每秒处理的消息数不超过配置的阈值?您可以编写一个节流螺栓。使用topology.max.spout.pending可以阻止喷口一次发出超过一定数量的元组。节流螺栓应接收发出的元组,并且每秒仅允许20个元组通过。您可以使用resetTimeout方法,在节流螺栓固定元组时,防止元组超时。可以使用滴答元组来计时。另一种选择是,将KafkaSpout封装在自己的喷口实现中,并且只允许它每秒发出20个元组。这可能更简单。