我创建了一个不可靠的小型拓扑结构,其中一个 spout 从包含经纬度坐标的文件中读取行,其中一个下游螺栓调用外部反向地理编码服务来确定国家/地区。因为这个特定的螺栓在一段时间后以非常慢的速度处理元组,所以整个拓扑停止(不产生输出)。
(1) 我想知道当螺栓无法处理元组的传入速率时会发生什么。据我了解,storm 是基于推送的,这意味着 spout 在循环中连续发出元组,并将它们存储在每个工作程序/执行程序的下游发送和接收缓冲区/队列中。当这些缓冲区/队列完全填满时会发生什么?spout 是否停止发出新的元组?由于从 0mq 到 netty 传输层的转换,这个实现是否发生了变化?
(2) 已经提到,在不可靠的拓扑结构中,在 Storm 中进行流控制的唯一方法是使用 acking 系统和 max spout 挂起参数在 spout 上发出带有 id 的元组,而无需在 ack/fail 方法中执行任何操作. 这是因为 0mq 传输层存在一些限制。现在storm > 0.9使用了netty传输层,还有其他方法可以在不可靠的拓扑中进行流量控制吗?
先感谢您