首页 > 解决方案 > 在 Flink Stateful 功能模块中存储数据库或第三方连接

问题描述

我试图了解 Flink Statefun 模块的范围。假设我有一个第三方服务需要首先建立连接(例如凭证。这需要很长时间)然后,我可以与之交互。

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

标签: apache-flinkflink-statefun

解决方案


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

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

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

推荐阅读