Apache Storm:当没有可用的螺栓来使用元组时,元组会发生什么?
Apache Storm: what happens to a tuple when no bolts are available to consume it?
如果它链接到另一个螺栓,但下一个螺栓的实例暂时不可用。它会徘徊多久?无限期?足够长了?
如果有很多元组在等待,那会怎么样呢,因为下一个可用螺栓有一条线或队列。他们会合并吗?如果备份太多会发生坏事吗?
有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,队列将满,如果不使用ack函数确保它会被重新发送,元组将丢失.
- 默认情况下,元组将在发出后 30 秒后超时;您可以更改此值,但除非您知道自己在做什么,否则不要这样做 (topology.message.timeout.secs)
- 如果 spout 正在从可靠的数据源(例如 kafka)读取,失败和超时的元组将由 spout 重放;这是,风暴有guaranteed message processing。如果你正在编写自己的 spout,你可能想深入研究这个。
- 当元组在 spout 上失败但在 bolts 上失败时,您可以查看在风暴 UI 上是否有超时元组。
- 您不希望元组在您的拓扑结构中超时(例如,kafka 因不按顺序读取而导致性能下降)。您应该调整拓扑过程元组的容量(即,通过更改执行程序的数量来调整 bolt 并行度)并将参数 topology.max.spout.pending 设置为合理的保守值。
- 增加 topology.message.timeout.secs 参数不是真正的解决方案,因为如果拓扑容量不够,元组迟早会开始失败。
- topology.max.spout.pending 是可以等待的最大元组数。只要未完全处理的元组数量小于给定值,spout 就会发出更多元组。请注意,参数 topology.max.spout.pending 是每个喷口(每个喷口都有其内部计数器并跟踪未完全处理的元组)。
如果元组在超时之前没有被消耗,Storm 只会丢弃它们。 (默认为 30 秒)
之后,Storm 调用 Spout 的 fail(Object msgId)
方法。如果你想重播失败的元组,你应该实现这个功能。您需要将元组保存在内存或其他可靠的存储系统(例如 Kafka)中以重放它们。
如果您不实现 fail(Object msgId)
方法,Storm 只会丢弃它们。
参考:https://storm.apache.org/documentation/Guaranteeing-message-processing.html
如果它链接到另一个螺栓,但下一个螺栓的实例暂时不可用。它会徘徊多久?无限期?足够长了?
如果有很多元组在等待,那会怎么样呢,因为下一个可用螺栓有一条线或队列。他们会合并吗?如果备份太多会发生坏事吗?
有一个反序列化队列用于缓冲即将到来的元组,如果它挂起的时间足够长,队列将满,如果不使用ack函数确保它会被重新发送,元组将丢失.
- 默认情况下,元组将在发出后 30 秒后超时;您可以更改此值,但除非您知道自己在做什么,否则不要这样做 (topology.message.timeout.secs)
- 如果 spout 正在从可靠的数据源(例如 kafka)读取,失败和超时的元组将由 spout 重放;这是,风暴有guaranteed message processing。如果你正在编写自己的 spout,你可能想深入研究这个。
- 当元组在 spout 上失败但在 bolts 上失败时,您可以查看在风暴 UI 上是否有超时元组。
- 您不希望元组在您的拓扑结构中超时(例如,kafka 因不按顺序读取而导致性能下降)。您应该调整拓扑过程元组的容量(即,通过更改执行程序的数量来调整 bolt 并行度)并将参数 topology.max.spout.pending 设置为合理的保守值。
- 增加 topology.message.timeout.secs 参数不是真正的解决方案,因为如果拓扑容量不够,元组迟早会开始失败。
- topology.max.spout.pending 是可以等待的最大元组数。只要未完全处理的元组数量小于给定值,spout 就会发出更多元组。请注意,参数 topology.max.spout.pending 是每个喷口(每个喷口都有其内部计数器并跟踪未完全处理的元组)。
如果元组在超时之前没有被消耗,Storm 只会丢弃它们。 (默认为 30 秒)
之后,Storm 调用 Spout 的 fail(Object msgId)
方法。如果你想重播失败的元组,你应该实现这个功能。您需要将元组保存在内存或其他可靠的存储系统(例如 Kafka)中以重放它们。
如果您不实现 fail(Object msgId)
方法,Storm 只会丢弃它们。
参考:https://storm.apache.org/documentation/Guaranteeing-message-processing.html