如何共享JDBC DataSource交叉flink运算符?

时间:2019-05-14 10:19:07

标签: apache-flink flink-streaming

我需要在多个操作员中访问数据库。当前的解决方案是使用AbstractRichFunction并通过openclose方法管理数据源的生命周期。

这是我的代码:

public class DbRichFunction extends AbstractRichFunction {
    private final DbConfig dbConfig;
    private transient DataSource dataSource;

    public DbRichFunction(DbConfig dbConfig) {
        this.dbConfig= dbConfig;
    }

    @Override
    public void open(Configuration parameters) throws Exception {
        dataSource = dbConfig.create();
    }

    @Override
    public void close() throws Exception {
        dataSource.close();
    }
}

如果我可以在同一jvm中共享同一任务跨任务(无论是否具有相同的运算符),将节省资源。我不确定如果将静态变量与引用计数器一起使用是否会导致内存泄漏。

这就是我想要做的:

public class DbRichFunction extends AbstractRichFunction {
    private transient DataSource dataSource;

    public DbRichFunction() {
    }

    @Override
    public void open(Configuration parameters) throws Exception {
        dataSource = DbConfig.acquire();
    }

    @Override
    public void close() throws Exception {
        DbConfig.release();
    }
}

0 个答案:

没有答案