开发者社区> 问答> 正文

Flink中一个作业中的多个作业或多个管道

我有一个用例,我希望在Flink上运行2个独立的处理流程。所以2流看起来像

Source1 - > operator1 - > Sink1

Source2 - > operator2 - > Sink2

我想为两个流重用相同的Flink集群。我可以想到以两种方式做到这一点:

1)在同一Flink应用程序上提交2个不同的作业

2)在同一工作中设置2个管道

我能够设置第一个选项,但不知道如何做第二个选项。有人曾经尝试过这样的设置吗?一个优于另一个的优势是什么?

展开
收起
社区小助手 2018-12-11 16:16:50 4745 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    可以在setupJob()方法中创建多个管道(使用单独的或共享的源使用者)。这是一个例子:

    private void buildPipeline(StreamExecutionEnvironment env, String sourceName, String sinkName) {

    DataStream<T> stream = env
            .addSource(getInputs().get(sourceName))
            .name(sourceName);
    stream = stream.filter(evt -> filter());
    ....

    }

    @Override
    public void setupJob(AthenaFlinkJobConfiguration jobConfig, StreamExecutionEnvironment env) throws Exception {

    ...
    buildPipeline(env, sourceTopic1, sink1, ...);
    buildPipeline(env, sourceTopic2, sink2, ...);
    ...

    }
    这是两种方法的快速对比。使用单独工作的优点/缺点:

    [+]代码更简单。
    [+]更灵活地设置低级配置(容错机制,堆大小,并行性等)
    [ - ]由于资源不共享,因此基础设施成本较高。
    [ - ]维护和监控更复杂,更耗时。
    在单个作业中使用单独管道的好处:

    [+]监控和调试单个作业更容易。
    [+]修补程序被提交到单个仓库并部署到单个环境中。
    [+]经济:降低基础设施硬件和运营成本。
    [ - ]不能绑定单个管道使用。
    [ - ]一个管道中的故障会影响另一个管道。
    [ - ]一个管道中的背压可能会影响整个作业,因为每个作业都会为一个检查点创建快照。

    2019-07-17 23:19:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载