【问题标题】:More complicated correlations by rules更复杂的规则关联
【发布时间】:2015-11-08 17:13:57
【问题描述】:

我已经看到了对聚合和连接的一些支持,但没有太多关于它的说法,

我想知道当没有明确的关联 ID 时,Storm 是否可以在事件之间关联。

例如,假设我有 3 个(可能更多)Spout,它们发出表示来自不同来源的 Person 的元组。

Spout 1:
Person: name, security_id

Spout 2:
Person: fullName, secId, email

Spout 3:
Person: email

管道的末端应该是 1 个合并元组的列表(字段应该从所有元组中组合),我想根据以下条件合并 Person 元组:

Spout1.security_id = Spout2.secId
||
Spout2.email = Spout3.email

(may be more rules)

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    在您的情况下,您似乎需要做一个“窗口笛卡尔积”(这非常昂贵)。为此,您需要使用allGrouping 连接模式将所有喷嘴连接到单个连接螺栓。此外,在加入 bolt 时,您需要使用 input.getSourceComponent()input.getSourceStreamId() 区分传入的元组(即,从哪个 spout 发出元组)。有关这两种方法的讨论,请参见此处:How to send output of two different Spout to the same Bolt?

    最棘手的部分是缓冲。因为您没有任何排序保证,并且您不知道元组是否会在将来加入,所以您需要将每个传入的元组缓冲一段时间(最好对不同的源使用不同的缓冲区)。每次收到元组时,都需要使用所有缓冲元组来评估复杂谓词。最难回答的问题是,在缓冲区中保留元组多长时间。这个问题取决于应用程序,因为它是一个纯语义问题。你需要自己回答。

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 2011-12-21
      • 1970-01-01
      • 2017-08-05
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2018-05-19
      相关资源
      最近更新 更多