因此,我尝试将我的喷口配置为从amazonsqs队列中读取。现在,我想要一种情况,在这种情况下,我可以共享多个喷口的负载。我知道有多个线程是可能的,但是我能有两个或更多不同的喷口示例/应用程序从同一队列读取数据并发送到同一拓扑吗?例如,喷口a和喷口b从sqs读取数据,然后两者都排放到螺栓c?
2exbekwf1#
当然,您可以有多个喷口,但是您必须相应地定义它们,以防止同一元素的双重提交(或者您的拓扑在设计上确实接受这一点)。例如,同一元素的多个进程意味着错误的计数器。首先检查storm并发,每个saut/bolt的执行器(线程)和任务(示例),然后选择所需的数量。在您的代码中,您必须确保不会管理同一元组两次或两次以上,或者在storm之前这样做(例如,一个队列两次不接受同一个元素,该元素被多个喷口处理/清空),或者多个队列-每个喷口一个,当心事务)或者在storm中执行(处理消息时,一个喷口中只有x param,另一个喷口中只有y,消息不能同时是x和y)。
r55awzrz2#
sqs queue----->spout(n个执行者)。这个型号很好。一旦任何一个executor示例接收到消息,消息就会从sqs中不可见。在storm拓扑中保持消息不可见时间远高于消息处理时间。您可以在ack方法中保留delete sqs消息逻辑。
2条答案
按热度按时间2exbekwf1#
当然,您可以有多个喷口,但是您必须相应地定义它们,以防止同一元素的双重提交(或者您的拓扑在设计上确实接受这一点)。例如,同一元素的多个进程意味着错误的计数器。
首先检查storm并发,每个saut/bolt的执行器(线程)和任务(示例),然后选择所需的数量。
在您的代码中,您必须确保不会管理同一元组两次或两次以上,或者在storm之前这样做(例如,一个队列两次不接受同一个元素,该元素被多个喷口处理/清空),或者多个队列-每个喷口一个,当心事务)或者在storm中执行(处理消息时,一个喷口中只有x param,另一个喷口中只有y,消息不能同时是x和y)。
r55awzrz2#
sqs queue----->spout(n个执行者)。
这个型号很好。一旦任何一个executor示例接收到消息,消息就会从sqs中不可见。
在storm拓扑中保持消息不可见时间远高于消息处理时间。
您可以在ack方法中保留delete sqs消息逻辑。