2016-08-05 8 views
1

Предположим, что мы имеем поток событий с событиями со следующими двумя признаками:Что происходит при использовании нескольких полей при группировке полей?

{"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 правильно?


Edit:

Думая об этом немного больше я, наверное, неправильно поведение fieldsgrouping. Если оба поля считаются связанными событиями 1, 2 и 3, каждый считается отдельным разделом. Удаление проблемы.

Тем не менее, это не сразу видно с официального лица documentation Я могу найти на fieldsgrouping.

Если кто-нибудь может указать мне на более подробную документацию.

+1

Собственное наблюдение является правильным. Три кортежа относятся к другому «логическому разделу» каждый, потому что они не равны по всем полям. Таким образом, проблем нет. Я также думаю, что документация является точной (возможно, не полной): «Группировка полей: поток разделяется полями, указанными в группировке. [...]« Он говорит «поля», т. Е. Множественное число. Даже если в примере используется только одно поле для группировки, если вы экстраполируете это, ясно, что для нескольких полей группировки все значения полей должны быть одинаковыми, если два кортежа принадлежат одной группе/разделу. –

ответ

1

Вы группируете имя по фамилии, что означает, что не все кортежи с одинаковым именем будут попадать в одно и то же место назначения, но кортежи с тем же именем и фамилией будут.

Storm Applied (п. 3.5.3) имеет хороший пример, основанный на группировке уличных проверок по времени и городу вместо использования только интервала времени. По сути, последний создавал узкое место всех уличных проверок на том же промежутке, заканчивающемся тем же самым болтом, независимо от города. Добавив группу к группировке полей, они сохранили требование о том, чтобы все уличные проверки были в одном и том же болте, и в то же время они устранили узкое место.