Когда использовать переходный процесс, когда не во флинке? - PullRequest
1 голос
/ 18 марта 2019

в этом коде, я должен использовать transient?

когда я могу использовать transient?

в чем разница?

нужна ваша помощь

private              Map<String, HermesCustomConsumer> topicSourceMap                 = new ConcurrentHashMap();
private              Map<TopicAndPartition, Long>      currentOffsets                 = new HashMap<>();
private transient Map<TopicAndPartition, Long>         restoredState;

1 Ответ

1 голос
/ 19 марта 2019

TL; DR
Если вы используете переменную transient, вам лучше создать ее экземпляр в open() методе операторов, который реализовал интерфейс Rich. В противном случае объявите переменную с начальным значением одновременно.

Используемые здесь состояния называются необработанными состояниями, управляемыми самим пользователем. Следует ли вам использовать модификатор transient в зависимости от цели сериализации. Перед тем, как отправлять работу Flink. Топология вычислений будет сгенерирована и распределена в кластер Flink. И операторы, включающие в себя источник и приемник, будут создавать экземпляры с полями, например, topicSourceMap в вашем коде. Переменные topicSourceMap и currentOffsets были созданы с помощью конструктора. Хотя restoredState является временной переменной, поэтому независимо от того, какое начальное значение вы присвоили, она не будет сериализована и распределена в какую-либо задачу для выполнения. Так что вам обычно нужно создать экземпляр в open() методе оператора, который реализовал интерфейс Rich. После десериализации этого оператора в какой-либо задаче метод open() будет вызван для создания ваших собственных состояний.

...