何时使用瞬态,何时不flink



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

我什么时候可以使用transient

有什么区别?

需要您的帮助

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

tl; dr
如果使用transient变量,则最好将其实例化,以实现Rich接口的open()操作员方法。否则,同时声明具有初始值的变量。

您在这里使用的状态称为用户本身管理的原始状态。是否应该根据序列化目的使用transient修饰符。在提交Flink工作之前。计算拓扑将生成并分布到弗林克集群中。以及包括源和接收器在内的操作员将与字段进行实例化,例如您的代码中的topicSourceMap。变量topicSourceMapcurrentOffsets已与构造函数实例化。虽然restoredState是瞬态变量,因此无论您分配了哪个初始值,它都不会被序列化并分配到某些任务中以执行。因此,您通常需要在实现Rich接口的open()操作方法中对其进行实例化。在某些任务中对该运算符进行了应有的序列化后,open()方法将被调用到您自己的状态中。

相关内容

  • 没有找到相关文章

最新更新