我正在尝试使用 Multilang 协议(protocol)来理解具有可靠消息传递的 Storm 拓扑中的消息序列。我遇到了 Storm 报告错误“不存在或已确认的元组”的问题。
下面是我认为的序列应该是什么样的......
有人可以确认或更正我下面的消息序列吗?
拓扑:1 Spout -> 1 BoltA -> 1 BoltB
为清楚起见,省略了握手。
Storm —> Spout { 命令:下一个 } 结束
Spout —> Storm { 命令:emit,Id:”42”,元组:[“Hello”,“World”] } end
Spout —> Stom {命令:同步}结束
Storm —> BoltA { id: “6524”, tuple: [“Hello”, “World”] } end
BoltA —> Storm { command: ack, id: “6524” } end
BoltA —> Storm { 命令:emit,id:“43”,anchor:[“6524”],tuple [“Ciao”,“Mondo”] } end//元组已通过翻译为意大利语进行处理:- )
Storm -> BoltB { id: “7465”, tuple [“Ciao”, “Mondo”] } end
BoltB -> Storm { command: ack, id: “7465” } end
Storm -> Spout { command: ack, id: “42” } end//Storm 让 spout 知道分支已完成。
最佳答案
在 Bolt 中,如果您想将正在发出的元组锚定到已接收的元组,则必须首先发出锚定的元组,然后再发出接收到的元组的 ack。所以你应该这样做:
Spout -> Storm emit 1
Storm -> Bolt deliver 1
Bolt -> emit 2, anchored to 1
Bolt -> ack 1
关于java - Apache Storm 多语言协议(protocol)确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303313/