在 Flink Stateful 功能模块中存储数据库或第三方连接

时间:2021-07-16 15:00:35

标签: apache-flink flink-statefun

我正在尝试了解 Flink Statefun 模块的范围。假设我有一个需要先建立连接的第三方服务(例如凭据。这需要很长时间),然后我就可以与其进行交互。

我正在尝试了解 Statfun 模块的范围,以及是否应该为我的所有功能创建该连接,或者我是否可以为每个模块创建该连接。

1 个答案:

答案 0 :(得分:1)

当一个模块被实例化时,它会为每个函数类型创建一个物理实例。然后将这些函数多路复用以支持引擎盖下的多个 id。对于应该共享的昂贵连接,请在创建物理实例时创建它们。

例如,假设您使用的是 Java SDK(尽管对于任何语言 SDK 看起来都一样)。创建资源最自然的地方是来自 StatefulFunctionSpec 的提供者,将资源传递给 Java 类构造函数。

StatefulFunctionSpec spec =
        StatefulFunctionSpec.builder(GreeterFn.TYPE)
            .withValueSpec(GreeterFn.SEEN)
            .withSupplier(() -> {
                 var resource = createExpensiveResource();
                 return new GreeterFn(resource);
            })
            .build();