Flink, когда разделить поток на задания, используя uid, rebalance - PullRequest
0 голосов
/ 04 февраля 2019

Я довольно новичок и собираюсь загрузить нашу первую рабочую версию.У нас есть поток данных.Фильтр с контролем состояния проверяет, являются ли данные новыми.

  1. Было бы лучше разделить поток на разные задания, чтобы получить больше контроля над параллелизмом, как показано в варианте 1, или вариант 2 лучше?split steam vs single

  2. в соответствии с рекомендацией по документации .я должен поставить uid на оператора, например:
dataStream
.uid("firstid")
.keyBy(0)
.flatMap(flatMapFunction)
.uid("mappedId)
я должен добавить ребаланс после каждого uid, если вообще? Какая разница, если я установлю MaxParallelism, как описано здесь или установим параллелизм из интерфейса пользователя flink / cli?

1 Ответ

0 голосов
/ 04 февраля 2019

Вам нужно только определить .uid("someName") для ваших операторов с состоянием.Нет особой необходимости в операторах, которые не хранят состояние, поскольку в точках сохранения нет ничего, что нужно было бы сопоставить с ними обратно (подробнее об этом здесь ).Не больно, если вы делаете, хотя.rebalance поможет вам только при наличии перекоса данных и только в том случае, если вы не используете ключевые потоки.Если вы обрабатываете данные на основе ключа, и ваша нагрузка не распределяется равномерно по вашим ключам (т. Е. У вас есть множество «горячих» клавиш), то перебалансировка не очень вам поможет.

В приведенном выше примереЯ бы запустил вариант 2 и, возможно, перешел бы на вариант 1, если работа окажется слишком тяжелой.В общем, процессы без сохранения состояния очень быстры во Flink, поэтому, если вы не хотите добавить других потребителей к выходу вашего фильтра с отслеживанием состояния, не пытайтесь разделить его на этом этапе.Там не правильно и неправильно, хотя, зависит от вашей проблемыНачните с простого и возьмите его оттуда.

[Обновить] Re 4, setMaxParallelism, если я не ошибаюсь, определяет количество групп ключей и, следовательно, максимальное количество параллельных экземпляров, в которое может быть изменен ваш поток.Это используется Flink внутри, но не устанавливает параллелизм вашей работы.Обычно вам нужно установить это значение, кратное фактическому параллелизму, установленному для вашей работы (через -p <n> в интерфейсе командной строки / интерфейсе пользователя при его развертывании).

...