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

What happens when using multiple field on fieldsgrouping?

假设我们有一个事件流,其中的事件具有以下两个属性:

{"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 并不能立即明确这一点

如果有人可以向我指出更详细的文档。

您是按名字按姓氏分组,这意味着并非所有具有相同名字的元组最终都会到达相同的目的地,但具有相同名字和姓氏的元组会。

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