Может ли поток данных Google GroupByKey обрабатывать горячие клавиши? - PullRequest
0 голосов
/ 05 декабря 2018

Ввод PCollection<KV<String,String>> Я должен записывать файлы по ключу и каждой строке в качестве значения группы KV.Для группировки по ключу у меня есть 2 варианта: 1. GroupByKey -> PCollection<KV<String, Iterable<String>>> 2. Combine.perKey.withhotKeyFanout -> PCollection, где значение String накапливает строки из всех пар.(Combine.CombineFn<String, List<String>, CustomStringObJ>)

Я могу иметь миллионы записей на ключ. Сбор данных с ключом оптимизирован с помощью Windows и Trigger, но может содержать тысячи записей на ключ.Я беспокоюсь о том, что максимальный размер String вызовет проблему, если Combine.perKey.withHotKeyFanout используется для создания CustomStringObJ, который имеет List<String> в качестве члена для записи в файл.

Если мы используем GroupByKey, как обрабатывать горячие клавиши

1 Ответ

0 голосов
/ 06 декабря 2018

Вы должны использовать подход с GroupByKey, а не Combine для объединения большой строки.Реальная реализация (не уникальная для Dataflow) заключается в том, что элементы перетасовываются в соответствии с их ключом, а в выводе KV<K, Iterable<V>> повторяемые значения представляют собой конкретное ленивое / потоковое представление для элементов, перетасованных в этот ключ.Фактически итерируемого не существует - это так же хорошо, как перенаправлять каждый элемент работнику, которому принадлежит каждый файл, и записывать его напрямую.

Использование окон и триггеров может фактически привести к принудительной буферизации и сделать ее менее эффективной.Вы должны использовать временное окно событий, только если оно является частью вашего бизнес-кейса;это не механизм контроля производительности.Триггеры хороши для управления тем, как данные группируются и отправляются в нисходящем направлении, но наиболее полезны для агрегатов, где менее частый запуск экономит большой объем данных.Для необработанной группировки элементов триггеры имеют тенденцию быть менее полезными.

...