Легким решением было бы поставить rebalance()
сразу после потребителя кинезиса. rebalance()
делает перераспределение туда и обратно. Это перераспределит события, считываемые с одного осколка, среди 8 экземпляров карты, которая следует за ним.
Документация .
Перебалансировка вызовет ser / de и перестановка в сети. Вам придется сопоставить это с преимуществом наличия 8 активных конвейеров, а не одного.
Учитывая, что ваш график работы выглядит примерно так,
source -> map -> async -> filter -> keyBy + process function -> sink
keyBy позже в вашем конвейере вызовет еще одну случайную работу сети. Если вы очень обеспокоены производительностью, вы можете избежать использования keyBy сразу после источника (вместо использования перебалансировки там), а затем использовать reinterpretAsKeyedStream после оператора asyn c для Избегайте второго перестановки в сети. Причина, по которой это становится немного запутанной, заключается в том, что оператор asyn c ничего не знает о потоках с ключами - и это будет работать, только если один и тот же KeySelector имеет смысл как до, так и после функции asyn c.