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

w8f9ii69  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(832)

假设我有一个flink应用程序来过滤、转换和处理流。
如何将此应用程序分成两个作业,并在不使用间歇存储的情况下与它们进行b/w通信。
请参阅下图了解数据流。
用例的原因:
事件大小:2kb,事件精简:200b,tps:1m
为了有效地使用java堆在任何给定的时间存储更多的事件,需要进行转换。在单个taskmanager上执行所有三种操作的缺点是也要存储摄取的事件,其中将近80%的事件是不需要的。
在不同的任务管理器上运行这些作业将在扩展处理功能方面提供极大的灵活性。
需要帮助实现这一点,任何建议都是欢迎的。还试图了解如何通过一个flink应用程序提交多个作业。

7vhp5slm

7vhp5slm1#

有几点:
flink1.11引入的应用模式允许 main() 方法提交多个作业,但这些作业之间没有直接通信的机制。flink通过快照实现容错的方法并没有扩展到管理多个作业中的状态。
假设您可以将作业与套接字接收器和套接字源连接起来。但如果你这样做,你就会放弃容错。
通过配置一个插槽共享组,强制管道的最后一个阶段进入它们自己的插槽,您可以实现类似于您所要求的内容。然而,这几乎肯定是一个坏主意,因为它将强制执行原本不必要的ser/de,并且还会导致资源利用率降低。但它会将这些管道阶段分离到另一个jvm中。
如果目标是拥有可单独部署和可独立扩展的组件,那么可以通过使用带状态函数api的远程函数来实现。
为了最大限度地提高您所展示的etl作业的性能(并最小化垃圾收集),如果您利用操作符链接和对象重用,并将所有内容都放在一个作业中,您可能会过得更好。

相关问题