当前位置: 首页 > 知识库问答 >
问题:

如何使storm发送元组有序?

庄康胜
2023-03-14

当我写一个storm拓扑的时候,我发现元组的顺序并不总是和spout发出的顺序一样(spout的作用是在行中读取一个文件,并将行发送到一个没有thread.sleep()的bolt,所以这个过程会非常快)。

谁能告诉我,我如何确保元组的顺序,是由喷口或螺栓发出的?多谢!

共有1个答案

方永贞
2023-03-14

您可能想了解一下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)