问题描述
我正在尝试了解 Flink Statefun 模块的范围。假设我有一个需要先建立连接的第三方服务(例如凭据。这需要很长时间),然后我就可以与其进行交互。
我正在尝试了解 Statfun 模块的范围,以及是否应该为我的所有功能创建该连接,或者我是否可以为每个模块创建该连接。
解决方法
当一个模块被实例化时,它会为每个函数类型创建一个物理实例。然后将这些函数多路复用以支持引擎盖下的多个 id。对于应该共享的昂贵连接,请在创建物理实例时创建它们。
例如,假设您使用的是 Java SDK(尽管对于任何语言 SDK 看起来都一样)。创建资源最自然的地方是来自 StatefulFunctionSpec 的提供者,将资源传递给 Java 类构造函数。
StatefulFunctionSpec spec =
StatefulFunctionSpec.builder(GreeterFn.TYPE)
.withValueSpec(GreeterFn.SEEN)
.withSupplier(() -> {
var resource = createExpensiveResource();
return new GreeterFn(resource);
})
.build();