Apache storm ApacheStorm:当没有螺栓可以使用元组时,元组会发生什么?
如果它链接到另一个螺栓,但下一个螺栓的实例暂时不可用。它能挂多久?无限期地够长了吗Apache storm ApacheStorm:当没有螺栓可以使用元组时,元组会发生什么?,apache-storm,Apache Storm,如果它链接到另一个螺栓,但下一个螺栓的实例暂时不可用。它能挂多久?无限期地够长了吗 如果有许多元组正在等待,因为有一条线或队列等待下一个可用的螺栓,那又如何呢。他们会合并吗?如果备份的数据太多,会发生不好的事情吗?有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,队列将满,如果您不使用ack函数确保它将被重新发送,元组将丢失。有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,如果不使用ack函数确保重新发送,队列将满,元组将丢失 默认情况下,元组将在发出后30秒超
如果有许多元组正在等待,因为有一条线或队列等待下一个可用的螺栓,那又如何呢。他们会合并吗?如果备份的数据太多,会发生不好的事情吗?有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,队列将满,如果您不使用ack函数确保它将被重新发送,元组将丢失。有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,如果不使用ack函数确保重新发送,队列将满,元组将丢失
如果元组直到超时才被使用,Storm就会删除它们。(默认值为30秒) 之后,Storm调用了
fail(Object msgId)
Spout方法。如果要重播失败的元组,应该实现此函数。您需要将元组保存在内存或其他可靠的存储系统(如Kafka)中,以重放元组
如果不实现fail(Object msgId)
方法,Storm只会删除它们
参考:如果元组直到超时才被使用,Storm只会删除它们。(默认值为30秒) 之后,Storm调用了
fail(Object msgId)
Spout方法。如果要重播失败的元组,应该实现此函数。您需要将元组保存在内存或其他可靠的存储系统(如Kafka)中,以重放元组
如果不实现fail(Object msgId)
方法,Storm只会删除它们
参考资料:有关Storm的内部缓冲机制以及使用的队列和线程的更多详细信息,请参见此处:有关Storm的内部缓冲机制以及使用的队列和线程的更多详细信息,请参见此处:这些都是很好的答案,我应该更具体一些。我关心的是拓扑中的元组。我在拓扑的末尾有一个缓慢的插销,它敲打了我的DB。我不想增加它的count/parellism,因为这会使DB变得更加困难,但我绝对不希望元组超时。不确定解决方案是什么。我通过批处理消息来批处理DB调用,但当我将系统置于严重负载下时,元组可能会开始超时。我想我肯定需要在storm ui上注意这一点,并根据需要调整和重新设计。@ab11好的,解决方案是使用topology.max.spout.pending设置。一旦你的最后一个螺栓完全处理一些元组,更多的元组将被释放。谢谢,我一定会调查这一点。顺便问一下,您是否知道Storm UI是否提供了有关非锚定元组超时的信息?我什么也没看到。@ab11你会看到元组在喷口上失败,但在螺栓上没有失败。这些是超时的元组。即使它们未锚定,它们是否会在喷口上失败?我想如果超时