gpt4 book ai didi

apache-flink - Flink 一个作业中的多个作业或多个管道

转载 作者:行者123 更新时间:2023-12-05 08:26:41 29 4
gpt4 key购买 nike

我有一个用例,我想在 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, ...);
...
}

下面是两种方法的快速对比。使用单独作业的优点/缺点:

  • [+] 代码更简单。
  • [+] 更灵活地设置低级配置(容错机制、堆大小、并行度等)
  • [-] 由于资源不共享,基础设施成本更高。
  • [-] 维护和监控更加复杂和耗时。

在单个作业中使用单独管道的好处:

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

关于apache-flink - Flink 一个作业中的多个作业或多个管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009948/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com