Повторное использование объекта Flink: изменить входные объекты? - PullRequest
1 голос
/ 04 марта 2020

У меня есть потоковое приложение Flink, которое тратит примерно 20% своего процессорного времени в Kyro.copy. Я могу избежать этого, включив режим повторного использования объектов, но у меня есть небольшая проблема: я хотел бы изменить входные объекты для своих операторов.

Общий контракт на режим повторного использования объектов, кажется, гласит: не изменять вводить объекты или помнить входные объекты после возвращения из вашей функции карты. Вы можете изменить объекты после output и переиздать их. (например: Слайд 6 )

Теперь мой вопрос: если я немедленно избавлюсь от всех ссылок на объекты после output -из их от своих операторов, безопасно ли изменять ввод объекты? Или есть какая-то другая комбинация правил, которая может безопасно изменять входные объекты?

1 Ответ

2 голосов
/ 04 марта 2020

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

Кстати, если хотите для повышения производительности почти всегда рекомендуется отказаться от сериализации Kryo. Kryo замедлит любой сетевой трафик c, если он у вас есть. Если это так, попробуйте использовать POJO, некоторые хорошо поддерживаемые форматы, такие как Avro, или напишите свой собственный сериализатор. Это, безусловно, улучшит производительность больше, чем повторное использование объекта. Этот пункт не применяется, если у вас нет сетевых каналов.

...