当我写一个storm拓扑的时候,我发现元组的顺序并不总是和spout发出的顺序一样(spout的作用是在行中读取一个文件,并将行发送到一个没有thread.sleep()
的bolt,所以这个过程会非常快)。
谁能告诉我,我如何确保元组的顺序,是由喷口或螺栓发出的?多谢!
您可能想了解一下Trident拓扑
Trident solves this problem by doing two things:
Each batch is given a unique id called the "transaction id". If a batch is retried it will have the exact same transaction id.
State updates are ordered among batches. That is, the state updates for batch 3 won't be applied until the state updates for batch 2 have succeeded.
有人能指导我在这种情况下如何使用三叉戟吗?或者使用storm功能的任何其他适用方式?
我使用三台机器和本指南在aws集群上设置了一个测试环境。 我在本地模式下测试了我的代码,并使用wirbelsturm创建了一个本地vagrant集群,这两种方法都能产生预期的结果。 当我现在向Web服务器提交代码时,我的喷口和所有的螺栓都是静默的。我的嘴读的是csv,我把它抄送给了灵气和我的主管。storm UI显示我的拓扑为活动的,并显示所有螺栓和我的喷口,但计数器不可见。主管没有已使用得员工.
关于拓扑结构的说明: 喷口连续向读取螺栓发送元组。 读取bolt过程并将结果发送给下一个bolt等等。 在R bolt中处理tuple1之后还是在readbolt发送tuple1写入bolt之后?
我有一个拓扑结构如下所示: 注意,Bolt2和Bolt3从Bolt1和Bolt4接收元组。所有bolt都是运行python脚本的ShellBolts,而spout是运行从RabbitMQ读取的python脚本的ShellSpout。除了Bolt4之外,所有的工作都是预期的。如果我在RabbitMQ中一次添加一条消息,它就会全部工作并且干净利落地完成。如果我在Bolt4上挂起消息时对消息进行排队,则
(xpost github问题) 这是我目前为止的尝试。我想我有一些配置错误,因为我知道我的正在发射事件,但我的Storm UI显示没有喷出发射。 我想也许我不应该在spout函数中绑定监听器? 该函数是否被多次调用?(看起来像是...参见https://github.com/rallysoftware/node-storm/blob/master/lib/spout.js#L4)