У меня есть потоковое приложение Flink, которое тратит примерно 20% своего процессорного времени на Kyro.copy. Я могу избежать этого, включив режим повторного использования объектов, но у меня есть небольшая проблема: я хотел бы изменить объекты ввода для своих операторов.
Общий контракт для режима повторного использования объектов, кажется, гласит: Не изменяйте входные объекты и не запоминайте входные объекты после возврата из функции карты. Вы можете изменять объекты после output
и повторно испускать их. (например: слайд 6)
Теперь мой вопрос: если я немедленно удалю все ссылки на объекты после output
-добавления их из моих операторов, безопасно ли изменять входные объекты? Или есть какая-то другая комбинация правил, которая может сделать безопасным изменение входных объектов?
Map<String, Object>
. Так нет выбора, кроме Крио? Кроме того, мне любопытно: даже если у меня нет сетевых каналов, я все равно получуKryo.copy
с несколькими операторами. Итак (исключая сборщик мусора), стоимость снизится примерно вдвое, но не будет 0? 11.03.2020Kryo.copy
обычно используется между связанными операторами, если повторное использование объекта отключено. Но также при трансляциях и объединениях вам необходимо реплицировать элементы, если включено повторное использование объектов (почти везде, где одна повторно используемая запись не используется сразу). 11.03.2020