我有一个用例,我希望在Flink上运行2个独立的处理流程。所以2流看起来像
Source1 - > operator1 - > Sink1
Source2 - > operator2 - > Sink2
我想为两个流重用相同的Flink集群。我可以想到以两种方式做到这一点:
1)在同一Flink应用程序上提交2个不同的作业
2)在同一工作中设置2个管道
我能够设置第一个选项,但不知道如何做第二个选项。有人曾经尝试过这样的设置吗?一个优于另一个的优势是什么?
可以在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, ...);
...
}
这是两种方法的快速对比。使用单独工作的优点/缺点:
[+]代码更简单。
[+]更灵活地设置低级配置(容错机制,堆大小,并行性等)
[ - ]由于资源不共享,因此基础设施成本较高。
[ - ]维护和监控更复杂,更耗时。
在单个作业中使用单独管道的好处:
[+]监控和调试单个作业更容易。
[+]修补程序被提交到单个仓库并部署到单个环境中。
[+]经济:降低基础设施硬件和运营成本。
[ - ]不能绑定单个管道使用。
[ - ]一个管道中的故障会影响另一个管道。
[ - ]一个管道中的背压可能会影响整个作业,因为每个作业都会为一个检查点创建快照。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。