繁体   English   中英

如何使用单个 Flink 应用程序提交多个 Flink 作业

[英]How to submit multiple Flink Jobs using Single Flink Application

假设我有一个 Flink 应用程序来过滤、转换和处理 stream。

如何将此应用程序分成两个作业并在不使用间歇性存储的情况下对它们进行黑白通信。

有关数据流,请参阅下图。

使用案例的原因:

事件大小: 2KB ,事件精简: 200B ,TPS: 1M

为了有效使用 Java 堆来在任何给定时间存储更多事件,需要进行转换。 在单个 TaskManager 上执行所有这三个操作的缺点是也存储摄取的事件,其中近 80% 的事件是不需要的。

在不同的任务管理器上运行这些作业将在扩展处理 function 方面提供极大的灵活性。

需要帮助来实现这一点,欢迎提出任何建议。 还试图了解如何通过单个 Flink 应用程序提交多个作业。

在此处输入图像描述

几点:

Flink 1.11 引入的应用模式,允许单个main()方法提交多个作业,但这些作业之间没有直接通信的机制。 Flink 通过快照实现容错的方法并没有扩展到在不止一项工作中管理 state。

假设您可以将作业与套接字接收器和套接字源连接起来。 但是如果你这样做,你将放弃容错。

您可以通过配置一个插槽共享组来实现与您所要求的类似的事情,该组将管道的最后阶段强制进入它们自己的插槽。 但是,这几乎可以肯定是一个坏主意,因为它会强制执行 ser/de,否则这可能是不必要的,并且还会导致资源利用率降低。 但它会将这些流水线阶段分成另一个 JVM。

如果目标是拥有可单独部署和独立扩展的组件,您可以通过使用带有状态函数 API的远程函数来实现。

为了通过您展示的那种 ETL 作业最大化性能(并最小化垃圾收集),如果您利用运算符链接和 object 重用,并将所有内容放在一个作业中,您可能会更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM