假设我们有一个事件流,其事件包含以下两个属性:
{"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并未立即明确这一点。
如果有人能指出我更详细的文件。
答案 0 :(得分:1)
您按名字对姓氏进行分组,这意味着并非所有具有相同名字的元组都将在同一目标上结束,但具有相同名字和姓氏的元组将会出现。
Storm Applied(第3.5.3节)有一个很好的例子,它基于按时间间隔和城市分组街道检查,而不是仅使用时间间隔。基本上,后者在相同的区间内创造了所有街道登记的瓶颈,无论城市是什么,都以同一个螺栓结束。通过将城市添加到字段分组,他们保持要求所有街道签到同一个螺栓,同时他们消除了瓶颈。