Apache storm 如何在Storm拓扑中实现局部字段分组?

Apache storm 如何在Storm拓扑中实现局部字段分组?,apache-storm,Apache Storm,我想知道下面的功能是否适用于Storm拓扑或 有一些钩子可以模拟它们: 本地字段分组。有一个本地洗牌分组。局部字段 分组也可能是一个非常有用的特性,对于我们需要 不希望元组尽可能地在整个worker之间移动,但也要保持 字段分组的好处。我在Storm 0.9.0.1代码库中进行了更改 (非apache)并且它似乎正在工作 通过喷口显式取消元组的能力 查询元组状态的能力(通过其对象id) 元组的生存时间属性。框架应该抛弃 在生存期内未处理的任何元组 这些特性在某些用例中可能会有所帮助。或者功能可能

我想知道下面的功能是否适用于Storm拓扑或 有一些钩子可以模拟它们:

  • 本地字段分组。有一个本地洗牌分组。局部字段 分组也可能是一个非常有用的特性,对于我们需要 不希望元组尽可能地在整个worker之间移动,但也要保持 字段分组的好处。我在Storm 0.9.0.1代码库中进行了更改 (非apache)并且它似乎正在工作
  • 通过喷口显式取消元组的能力
  • 查询元组状态的能力(通过其对象id)
  • 元组的生存时间属性。框架应该抛弃 在生存期内未处理的任何元组

  • 这些特性在某些用例中可能会有所帮助。或者功能可能已经存在。非常感谢您的澄清。

    1-本地字段分组没有多大意义。字段分组意味着对于给定字段使用相同值发出的所有元组将由接收方的同一实例处理。本地意味着如果有给定螺栓的本地副本,则应首选该副本。这两个概念并不完全吻合

    2-我对storm的内部结构不太熟悉,但我不知道这是如何工作的。接收一个元组的每个螺栓将产生更多的元组。这些元组可以链接回它们的“父”元组,并构建一棵树返回到原始元组。“取消”元组的能力需要(我猜)能够标记元组的所有子元组,以便生成的任何新元组都不会被处理

    3-参见前面的答案,跟踪此状态并将其暴露可能会给storm增加大量开销


    4-参见中的可靠性部分。在一个可靠的喷口上实现fail方法可以实现类似的效果,但只适用于喷口发出的原始元组。

    这里有很多不相关的问题,几乎没有上下文(即,您试图实现什么)。考虑将它们分离出来,并填写关于这些用例的更多细节。对于我来说,这个分组也会产生感觉。如果,例如,使用卡夫卡喷口和数据已经被分区,那么理论上,您将能够减少在工作人员级别的字段分组,这将节省大量的交付时间,从而提供更多的吞吐量。对吗?本地字段分组将像本地随机分组一样有用。比如说,我希望尽可能减少工作人员之间的网络IO,还希望使用相同字段值发出的所有元组都由接收方的相同任务处理。那么本地字段分组很有用。是的。取消元组树可能不是一件小事。这就是为什么我问是否有办法做到这一点,因为我没有意识到这一点。现在,我们依赖于喷口中的“失败”方法,即使是超时。要知道谁失败了,以及失败是否是因为超时,没有简单的方法。我使用了一种变通方法,即使用memcache注册详细的故障信息。但是在超时的情况下,这没有帮助,元组的重放可能没有帮助,因为元组可能再次超时。对于本地字段分组,当两个系统上的两个螺栓想要发送一个具有匹配字段的元组时,会发生什么情况?本地shuffle很有意义,它基本上是说“我不在乎谁得到这个,所以如果附近有人把它给他们”字段分组是说“所有看起来像这样的元组都必须给同一个收件人”,我只是不知道如何添加“,所以如果附近有人把它给他们”对于后一种说法,让它有意义