2015-06-09 42 views

回答

0

Storm 0.9.3引入了multilang子进程的心跳。 (其实我介绍了它。)

正如你所知道的那样,当你的工作人员没有及时写下心跳时,nimbus和主管会检查工作人员的心跳,并采取适当的行动。

Multilang子进程心跳正在做类似的事情,但它使用multilang协议而不是ZK。

  1. 之前0.9.3,同步()仅用于ShellSpout通知下一子进程的执行()已经完成。在0.9.3之后,Storm为sync()添加了新的含义,“心跳”(意味着通知我很好)。

  2. ShellSpout不发送心跳元组,导致正常情况Spout的nextTuple()被频繁地调用,子进程的next()也是如此。 ShellBolt每1秒将心跳元组发送到子进程。

希望这会有所帮助。

+0

这是否意味着如果一个multilang螺栓超过1秒处理一个元组,它(multilang bolt)将无法同步,它会被认为是死的? – Technocrat

+0

不,ShellBolt在子进程响应sync()时更新时间戳。并且ShellBolt定期检查时间戳,并且当当前时间戳和心跳时间戳之间的差值大于Config.SUPERVISOR_WORKER_TIMEOUT_SECS时,它将被视为不可用。 –

+0

因此,子进程必须处理一个元组,比Config.SUPERVISOR_WORKER_TIMEOUT_SECS少(一些余量)。实际上,ShellSpout将所有子进程的响应视为心跳,但它并未应用于ShellBolt。 https://github.com/apache/storm/pull/497解决它。 –

相关问题