Вам нужно только определить .uid("someName")
для ваших операторов с состоянием.Нет особой необходимости в операторах, которые не хранят состояние, поскольку в точках сохранения нет ничего, что нужно было бы сопоставить с ними обратно (подробнее об этом здесь ).Не больно, если вы делаете, хотя.rebalance
поможет вам только при наличии перекоса данных и только в том случае, если вы не используете ключевые потоки.Если вы обрабатываете данные на основе ключа, и ваша нагрузка не распределяется равномерно по вашим ключам (т. Е. У вас есть множество «горячих» клавиш), то перебалансировка не очень вам поможет.
В приведенном выше примереЯ бы запустил вариант 2 и, возможно, перешел бы на вариант 1, если работа окажется слишком тяжелой.В общем, процессы без сохранения состояния очень быстры во Flink, поэтому, если вы не хотите добавить других потребителей к выходу вашего фильтра с отслеживанием состояния, не пытайтесь разделить его на этом этапе.Там не правильно и неправильно, хотя, зависит от вашей проблемыНачните с простого и возьмите его оттуда.
[Обновить] Re 4, setMaxParallelism
, если я не ошибаюсь, определяет количество групп ключей и, следовательно, максимальное количество параллельных экземпляров, в которое может быть изменен ваш поток.Это используется Flink внутри, но не устанавливает параллелизм вашей работы.Обычно вам нужно установить это значение, кратное фактическому параллелизму, установленному для вашей работы (через -p <n>
в интерфейсе командной строки / интерфейсе пользователя при его развертывании).