Apache Storm 多语言协议确认处理
我正在尝试理解在使用多语言协议的可靠消息传递中,Storm拓扑中消息的顺序。我遇到了一些问题,Storm报告错误说“不存在或已经确认的元组”。
以下是我认为的消息顺序……
有没有人能确认或纠正我下面的消息顺序?
拓扑结构:1个Spout -> 1个BoltA -> 1个BoltB
为了清晰起见,省略了握手过程。
Storm -> Spout { 命令: next } 结束
Spout -> Storm { 命令: emit, Id:"42", 元组: ["Hello", "World"] } 结束
Spout -> Storm { 命令: sync } 结束
Storm -> BoltA { id: "6524", 元组: ["Hello", "World"] } 结束
BoltA -> Storm { 命令: ack, id: "6524" } 结束
BoltA -> Storm { 命令: emit, id: "43", anchor: ["6524"], 元组: ["Ciao", "Mondo"] } 结束 // 这个元组已经被处理,翻译成了意大利语:-)
Storm -> BoltB { id: "7465", 元组: ["Ciao", "Mondo"] } 结束
BoltB -> Storm { 命令: ack, id: "7465" } 结束
Storm -> Spout { 命令: ack, id: "42" } 结束 // Storm通知Spout这个分支已经完成。
1 个回答
2
在一个“bolt”中,如果你想把你发出的一个元组(tuple)和你收到的一个元组连接起来,你必须先发出那个连接的元组,然后再对收到的元组发出确认(ack)。所以你应该这样做:
Spout -> Storm emit 1
Storm -> Bolt deliver 1
Bolt -> emit 2, anchored to 1
Bolt -> ack 1