在字段分组上使用多个字段时会发生什么?

时间:2016-08-05 12:17:28

标签: apache-storm

假设我们有一个事件流,其事件包含以下两个属性:

{"first_name", "last_name"}

我们使用 fieldsgrouping 对这两个属性进行分区:

.fieldsgrouping{"spout", new Fields("first_name", "last_name")}

处理螺栓由两个任务并行化,以下事件按指定顺序进入流:

1: {"foo", "foo"}
2: {"bar", "bar"}
3: {"foo", "bar"}

现在事件1和2分别进入第一和第二任务,事件3会发生什么?如果它进入任一任务,它将破坏属性的 fieldsgrouping

Storm如何处理这个问题?或者我不能正确理解 fieldsgrouping 吗?

修改

考虑到这一点,我可能误解了 fieldsgrouping 的行为。如果两个字段都被认为是耦合事件1,2和3,则每个字段都被视为不同的分区。删除问题。

但是,我在 fieldsgrouping 上找到的唯一官方documentation并未立即明确这一点。

如果有人能指出我更详细的文件。

1 个答案:

答案 0 :(得分:1)

您按名字对姓氏进行分组,这意味着并非所有具有相同名字的元组都将在同一目标上结束,但具有相同名字和姓氏的元组将会出现。

Storm Applied(第3.5.3节)有一个很好的例子,它基于按时间间隔和城市分组街道检查,而不是仅使用时间间隔。基本上,后者在相同的区间内创造了所有街道登记的瓶颈,无论城市是什么,都以同一个螺栓结束。通过将城市添加到字段分组,他们保持要求所有街道签到同一个螺栓,同时他们消除了瓶颈。