假设我有以下代码。引擎由这个抽象类的实现初始化,它是一个包含哈希表的复杂类。这样宣布有什么坏处?据我所知,这既不是原始状态,也不是管理状态。我应该用其中一个吗?为什么?
这里描述了托管状态,并使用flink库中现有的类(例如valuestate)。
另一方面,这里描述了原始状态,根据我所见,它只能在扩展abstractstreamoperator类时使用,而不是在这里(richmapfunction是扩展的)(将给出一个代码示例)
abstract class EmbeddedEngineMap(fsmList: List[FSMInterface],
predList: List[PredictorInterface],
predictorEnabled: Boolean,
expirationTime: Long,
collectStats: Boolean,
finalsEnabled: Boolean,
distance: (Double,Double)) extends RichMapFunction[GenericEvent, Unit] {
protected var engine: ERFEngine = _
....
}
1条答案
按热度按时间zc0qhyus1#
基本上,如果你不使用flink状态,这意味着你的
ERFEngine
将在每次启动或重新启动作业时示例化为新对象。这基本上意味着如果在执行任务的过程中engine
保持某些状态当作业失败、重新启动或停止时,它将丢失。我不会描述原始状态和托管状态之间的区别,因为您引用的帖子做得很好。基本上,原始状态是一个相当低级的api,它允许您实现自己的操作符,因此通常,托管状态是首选的,因为它利用了一些flink功能(例如允许在并行度更改时重新分布),并且通常更易于使用。