什么时候使用transient,什么时候不使用flink?

liu*_*uan 7 apache-flink

在此代码中,我应该使用吗transient

我什么时候可以使用transient

有什么不同 ?

需要你的帮助

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

小智 6

TL;DR
如果使用transient变量,最好在open()实现接口的运算符方法中实例化它Rich。否则,同时声明变量并赋予初始值。

您在这里使用的状态称为由用户自己管理的原始状态。是否应该使用transient修饰符取决于序列化目的。在提交 Flink 作业之前。计算拓扑将被生成并分发到Flink集群中。包括源和接收器在内的运算符将使用代码中的字段进行实例化topicSourceMap。变量topicSourceMapcurrentOffsets已使用构造函数实例化。whilerestoredState是一个瞬态变量,因此无论您分配什么初始值,它都不会被序列化并分发到某个任务中执行。所以你通常需要在open()实现Rich接口的操作符方法中实例化它。在某些任务中反序列化该运算符后,open()将调用方法来实例化您自己的状态。