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