apache storm,流的共分区

1tu0hz3e  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(379)

我有以下情况,我需要加入两个流出价(卖方,项目,价格)和问(买方,项目,价格),我需要发出一个元组(卖方,买方)时,买方提供了一个高于卖方要求的价格。
我知道我可以配置螺栓的分组选项fieldgrouping。但是,如果我分别配置每个输入,是否可以保证具有相同值的数据将始终转到相同的任务。
我放了一个伪代码来帮助解释更多

builder.setBolt("goodPrice", new GoodPriceBolt(), 5)
        .fieldsGrouping("Bid", new Fields("Item"))
        .FieldsGrouping("Ask", new Fields("Item"));

现在,根据文件http://storm.apache.org/releases/current/concepts.html,我们可以保证同一项目价值的所有投标数据点都将交付给同一个任务。但是,我不确定上面的代码是否也能保证所有与投标具有相同项目值的ask数据点将被交付到同一个任务。
换句话说,我需要对bid.item=ask.item进行分区。在Storm中可能吗?

epggiuax

epggiuax1#

是的,据我所知。联接作为一种常见模式列在storm的页面上http://storm.apache.org/releases/2.0.0-snapshot/common-patterns.html.
下面是storm中字段分组的实现https://github.com/apache/storm/blob/09e01231cc427004bab475c9c70f21fa79cfedef/storm-client/src/jvm/org/apache/storm/daemon/grouperfactory.java#l160. 值列表包含您在字段分组中指定的字段的值(在您的例子中是“item”)。要将元组发送到的任务的id基于https://github.com/apache/storm/blob/09e01231cc427004bab475c9c70f21fa79cfedef/storm-client/src/jvm/org/apache/storm/utils/tupleutils.java#l44,它使用值的哈希代码。只要“item”字段中的内容正确地实现了hashcode,就应该是好的。
你也可能对http://storm.apache.org/releases/1.2.1/joins.html,也许https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/org/apache/storm/starter/singlejoinexample.java. 请记住,在加入流时,应该尽量考虑到匹配的元组可能不会同时出现在joiner中,这就是为什么storm提供了一个连接螺栓,允许您指定一个窗口,以便在匹配的一部分上等待多长时间。

相关问题