gpt4 book ai didi

apache-storm - Storm 支持类似批处理的处理

转载 作者:行者123 更新时间:2023-12-04 04:21:19 27 4
gpt4 key购买 nike

我需要使用 Storm 处理成批的元组。我的最后一个 bolt 必须等到拓扑接收到整个批次,然后才能进行一些处理。为避免混淆 - 对我来说,批处理是一组实时出现的 N 条消息,该术语不必与批处理 (Hadoop) 相关联。甚至 2 条消息也可以是一个批次。

阅读 Storm 的文档是否可以肯定地说 Storm 本身并不支持这种批处理(batch = N 个实时消息)?

我知道我们有 Trident,但我没有使用它,但我确实对其进行了一些测试。 batchSpout 概念确实是我正在寻找的,因为您可以使用收集器进行批处理,并且 spout 将作为单个批处理发出消息。但撇开三叉戟不谈,普通的 Storm 能提供什么?

我如何解决这个问题是通过使用元组确认和一些超时黑客(也许它们不是黑客?)。作为消息代理,我使用了 RabbitMQ 并创建了一个 spout,它从队列中获取消息并将它们作为元组发送到下游,直到队列中没有更多消息为止。这些元组经过几个阶段(3-4 个阶段又名 bolt ),当它们到达最后一个 bolt 时,它们会停在那里。我需要停止它们(不发出任何东西),因为正如我所说,最后一个 bolt 需要处理整个批次的结果,然后只发出一个元组(最终结果元组)。那么它怎么知道什么时候应该处理呢?我让 spout 负责发出信号。当 spout 没有任何要发出的元组时,它会休眠 10 毫秒。因此,假设它休眠 1000 毫秒后,它会进入 READY 状态(它已准备好发出 END-OF-BATCH 或 TIME-OUT 信号)。但是还需要满足另一个条件。在我确定所有元组都到达最后一个 bolt 之前,我无法发送信号。所以我使用元组确认来跟踪这一点。当元组到达最后一个 bolt 时,它会被确认。当所有元组都被确认并且 spout 超时时,spout 发送信号,最后一个 bolt 现在很高兴,它可以处理那批元组的结果。

所以我的问题是,我亲爱的 Storm 大师,这个拓扑是否设计得很糟糕,它看起来像某种黑客吗?有一个更好的方法吗?

最佳答案

Storm 还提供 https://storm.incubator.apache.org/documentation/Transactional-topologies.html .尽管它们已被 Trident 弃用,但它们是在标准 Storm bolt /喷口之上实现的,因此您没有理由不能继续使用它们。您还可以考虑将您的流程拆分为两个拓扑结构,其中第二个拓扑结构等待,直到 RabbitMQ 中有 N 条消息要处理

关于apache-storm - Storm 支持类似批处理的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com