Пользовательское разбиение с помощью Keyed State - PullRequest
1 голос
/ 27 октября 2019

У меня есть своя собственная методика разбиения, которая генерирует ключи для кортежей DataStream, диапазон этих ключей равен числу узлов в кластерах, как если бы я установил параллелизм равным 4, сгенерированные ключи будут 0,1,2 и 3и так далее, а затем каждый ключ должен быть разделен на один и тот же узел, чтобы выполнить такую ​​более ключевую обработку с использованием состояния ключа.

Что произошло: я реализовал свою логику с помощью keyBy, поэтому я могу использовать состояние ключа, но оно страдает от большой асимметрии: некоторые узлы не получили записей, а другие получили более одного. Я пытался использовать пользовательское разбиение, оно делало физическое разбиение так, как я хочу, но я не могу использовать состояние ключа с ним без использования keyBy.

Есть ли способ управления перекосом или принудительно распараллеливать ключидоступные узлы? или есть ли способ переписать технику разделения, используемую в keyBy? или есть ли способ использовать состояние ключа с пользовательским разделением?

1 Ответ

2 голосов
/ 27 октября 2019

Насколько я знаю, не существует чистого решения для подобных ситуаций, когда размер пространства клавиш (приблизительно) равен параллелизму. Один из подходов грубой силы, который сработает, - это написать собственную функцию KeySelector и заставить ее вычислять ключи для каждого из разделов таким образом, чтобы эти ключи принадлежали к группам ключей, которые назначены отдельным работникам, но выясняем, как это сделать. это не просто.

Обсуждается вопрос об этом в списке рассылки пользователя .

...