在此代码中,我应该使用吗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。变量topicSourceMap和currentOffsets已使用构造函数实例化。whilerestoredState是一个瞬态变量,因此无论您分配什么初始值,它都不会被序列化并分发到某个任务中执行。所以你通常需要在open()实现Rich接口的操作符方法中实例化它。在某些任务中反序列化该运算符后,open()将调用方法来实例化您自己的状态。
| 归档时间: |
|
| 查看次数: |
3072 次 |
| 最近记录: |