1
我使用Storm 0.9.3,使用Python。同步方法在做什么以及心跳元组的频率是多少?
我指的是Multilang-protocol。
谁能解释:
- 什么
sync()
正在做的方法? - 心跳元组的频率是多少?
我使用Storm 0.9.3,使用Python。同步方法在做什么以及心跳元组的频率是多少?
我指的是Multilang-protocol。
谁能解释:
sync()
正在做的方法?Storm 0.9.3引入了multilang子进程的心跳。 (其实我介绍了它。)
正如你所知道的那样,当你的工作人员没有及时写下心跳时,nimbus和主管会检查工作人员的心跳,并采取适当的行动。
Multilang子进程心跳正在做类似的事情,但它使用multilang协议而不是ZK。
之前0.9.3,同步()仅用于ShellSpout通知下一子进程的执行()已经完成。在0.9.3之后,Storm为sync()添加了新的含义,“心跳”(意味着通知我很好)。
ShellSpout不发送心跳元组,导致正常情况Spout的nextTuple()被频繁地调用,子进程的next()也是如此。 ShellBolt每1秒将心跳元组发送到子进程。
希望这会有所帮助。
这是否意味着如果一个multilang螺栓超过1秒处理一个元组,它(multilang bolt)将无法同步,它会被认为是死的? – Technocrat
不,ShellBolt在子进程响应sync()时更新时间戳。并且ShellBolt定期检查时间戳,并且当当前时间戳和心跳时间戳之间的差值大于Config.SUPERVISOR_WORKER_TIMEOUT_SECS时,它将被视为不可用。 –
因此,子进程必须处理一个元组,比Config.SUPERVISOR_WORKER_TIMEOUT_SECS少(一些余量)。实际上,ShellSpout将所有子进程的响应视为心跳,但它并未应用于ShellBolt。 https://github.com/apache/storm/pull/497解决它。 –