Apache Storm - 使用多个喷口?

Apache Storm - use multiple spouts?

所以我正在尝试将我的 spout 配置为从 Amazon SQS 队列中读取。现在,我想要一种可以跨多个 spout 分担负载的情况。

我知道可以有多个线程,但是我可以有两个或更多不同的 spout instances/applications 从同一个队列读取并发送到同一个拓扑结构吗?例如。 Spout A 和 Spout B 从 SQS 读取,然后都发送到 bolt C?

当然,您可以有多个 spout,但您必须相应地定义它们以防止同一元素的双重提交(或者您的拓扑在设计上确实接受了)。例如,同一元素的多个进程意味着错误的计数器。

首先检查每个 spout/bolt 的执行器(线程)和任务(实例)的 Storm 并发性,然后选择您想要的数量。

在你的代码中,你必须确保你没有管理相同的元组两次或更多次,要么你在暴风雨之前这样做(一个不接受两次相同元素的队列被处理/清空例如,通过许多 spout 或多个队列 - 每个 spout 一个,当心事务)或者你在 storm 中这样做(处理消息只在一个 spout 中使用 x 参数,在另一个 spout 中使用 y 并且消息不能是 x 和 y同时)。

SQS 队列 -----> Spout(N 个执行程序)。

这个模型会非常好。一旦任何执行程序实例将接收消息,消息将从 SQS 中变得不可见。

保持消息不可见时间比 Storm 拓扑中的消息处理时间高得多。

您可以保留ack方法中的删除SQS消息逻辑。