风暴最大喷口待定

Nar*_*esh 17 real-time apache-storm

这是一个关于风暴的最大喷口如何工作的问题.我目前有一个读取文件的spout并为文件中的每一行发出一个元组(我知道storm不是处理文件的最佳解决方案,但我没有选择这个问题).我将max spout pending设置为50k,以限制要处理的拓扑中有多少​​元组.但是,我看到这个数字在拓扑中没有任何影响.我看到每次都会发出文件中的所有记录.我猜这可能是因为我在nextTuple方法中有一个循环,它发出文件中的所有记录.所以我的问题是暴风雨是否会在达到最大喷口待处时停止调用喷口任务的下一个元组?这是否意味着我每次调用nextTuple时都应该只发出一个元组?

Joh*_*ore 18

究竟!风暴只能用下一个命令来限制你的喷口,所以如果你在接下来的第一个命令时传输了所有东西,那么风暴就无法限制你的喷口.

Storm开发人员建议使用单个next命令发出单个元组.然后,Storm框架将根据需要限制您的喷口,以满足"最大喷口待定"要求.如果你发出大量的元组,你可以将你的排放量最多批量计入最大喷口的十分之一,以给予Storm一定的节流机会.


kar*_*tik 16

Storm拓扑具有最大spout挂起参数.可以通过拓扑配置yaml文件中的"topology.max.spout.pending"设置配置拓扑的最大spout挂起值.该值限制了在任何时间点的Storm拓扑中,有多少元组可以在飞行中,即尚未被激活或失败.对此参数的需求来自于Storm使用ZeroMQ将元组从一个任务分派到另一个任务的事实.如果ZeroMQ的消费者端无法跟上元组速率,则ZeroMQ队列开始建立.最终,在spout上的元组超时并重放到拓扑结构,从而增加了对队列的压力.为了避免这种病态故障,Storm允许用户限制拓扑中的元组数量.此限制在每个喷口任务的基础上生效,而不是在拓扑级别生效.(source)对于spout不可靠的情况,即它们的元组中不发出消息id,此值无效.Storm用户不断面临的一个问题是为这个最大spout挂起参数提供正确的值.一个非常小的值很容易使拓扑匮乏,而一个足够大的值可能会使拓扑过载,导致大量的元组导致故障和重放.用户必须经历多次拓扑部署迭代,并使用不同的最大spout挂起值来查找最适合他们的值.