这是一个关于 Storm 的最大喷口待处理如何工作的问题。我目前有一个 spout,它读取文件并为文件中的每一行发出一个元组(我知道 Storm 不是处理文件的最佳解决方案,但我对此问题没有选择)。
我设置了topology.max.spout.pending
到 50k 来限制进入拓扑进行处理的元组数量。但是,我发现这个数字对拓扑没有任何影响。我每次都会看到文件中的所有记录被发出。我的猜测是这可能是由于我在nextTuple()
发出文件中所有记录的方法。
我的问题是:Storm 会停止打电话吗nextTuple()
对于 Spout 任务,当topology.max.spout.pending
到达了?这是否意味着每次调用该方法时我应该只发出一个元组?
确切地! Storm 只能通过下一个命令来限制你的 spout,所以如果你在收到第一个下一个命令时传输所有内容,Storm 就无法限制你的 spout。
Storm 开发人员建议使用单个 next 命令发出单个元组。然后,Storm 框架将根据需要限制您的 spout,以满足“最大 spout 待处理”要求。如果您要发射大量元组,则可以将发射批处理最多为最大 spout 待处理的十分之一,以便 Storm 有机会进行限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)