如何为每个任务管理器(或每个节点)运行一个源代码?

r8uurelv  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(273)

我已经实现的源代码,其中打开固定的udp端口和监听它。因此,我希望每个任务管理器只运行一个源(在我的示例中,每个节点运行一个任务管理器),因为 java.net.BindException: Address already in use 将引发异常。
我在测试apache flink的ha时注意到了这个问题。当我关闭一个任务管理器时,apacheflick开始尝试在一个节点上运行具有相同端口的两个源。
那么,如何为每个任务管理器(或每个集群节点)运行一个源呢?

fd3cxomn

fd3cxomn1#

目前不可能动态地强制每个服务器上只运行一个任务 TaskManager . 通过将插槽数设置为,可以避免将多个源任务调度到同一台计算机 1 . 但是,如果你丢了一台机器,又没有备用的 TaskManager ,则没有足够的插槽重新启动作业。
或者,您可以编写源代码,使其更具弹性。例如,如果源无法绑定到指定的端口,您可以简单地停止它们。假设没有其他程序可以绑定到该端口,那么您就知道已经有另一个源任务在使用来自该端口的数据。

相关问题