Apache flink 作业之间的数据/事件交换

Apache flink 作业之间的数据/事件交换,apache-flink,Apache Flink,在ApacheFlink中是否可以创建一个应用程序,该应用程序由多个作业组成,这些作业构建一个管道来处理一些数据 例如,考虑一个具有输入/预处理阶段、业务逻辑和输出级的过程。 为了在开发和(重新)部署方面具有灵活性,我希望将它们作为独立作业运行 在Flink中是否有可能构建此功能并将一个作业的输出直接传输到另一个作业的输入(没有外部组件)? 如果是,我在哪里可以找到关于此的文档,如果其中一个作业重新启动,它可以缓冲数据? 如果没有,是否有人有过此类设置的经验,并为我指出可能的解决方案 谢谢大家!

在ApacheFlink中是否可以创建一个应用程序,该应用程序由多个作业组成,这些作业构建一个管道来处理一些数据

例如,考虑一个具有输入/预处理阶段、业务逻辑和输出级的过程。 为了在开发和(重新)部署方面具有灵活性,我希望将它们作为独立作业运行

在Flink中是否有可能构建此功能并将一个作业的输出直接传输到另一个作业的输入(没有外部组件)? 如果是,我在哪里可以找到关于此的文档,如果其中一个作业重新启动,它可以缓冲数据? 如果没有,是否有人有过此类设置的经验,并为我指出可能的解决方案


谢谢大家!

如果您真的想要单独的作业,那么连接它们的一种方法是通过类似于
Kafka
的方式,其中作业A发布,作业B(下游)订阅。但是,一旦断开这两个作业的连接,您就无法再获得背压或统一检查点/保存状态的好处

Kafka当然可以进行缓冲(最多可以缓冲一定数量的数据),但如果上游作业生成数据的速度快于下游作业消耗数据的速度,那么这并不能解决性能上的持久差异


我想您也可以使用文件作为作业之间的“桥梁”(流文件接收器,然后是流文件源),尽管这通常会造成很大的延迟,因为下游作业必须等待上游作业决定完成文件,一种已经成功使用多次的替代方法是动态提供预处理和业务逻辑阶段的详细信息,而不是将它们编译到应用程序中。这意味着作业图的总体拓扑是静态的,但您可以在作业运行时修改处理逻辑

我已经看过专门构建的DSL、PMML模型、Javascript(通过Rhino)、Groovy、Java类加载等等

您可以使用广播流来通信/更新处理的动态部分


下面是一个此模式的示例,在

您可能还想看看FLIP-36,它正在讨论如何在增量步骤之间持久化数据的设计。看见