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

时间:2016-03-21 16:52:15

标签: apache-flink flink-streaming

我已经实现了打开固定UDP端口并监听它的源代码。所以,我想为每个任务管理器运行一个源(在我的情况下,我为每个节点运行一个任务管理器),因为会抛出java.net.BindException: Address already in use异常。

我在Apache Flink的测试HA时发现了这个问题。当我关闭一个任务管理器时,Apache Flick开始尝试在一个节点上运行两个具有相同端口的源。

那么,如何为每个任务管理器(或每个群集节点)运行一个源?

1 个答案:

答案 0 :(得分:1)

目前无法动态强制执行每种TaskManager上只有一种任务运行。通过将插槽数设置为1,可以避免将多个源任务调度到同一台计算机。但是,如果您丢失了一台机器并且没有备用TaskManager,那么您将无法获得足够的插槽来重新启动该作业。

或者,您可以编写源代码,使其更具弹性。例如,如果源无法绑定到指定端口,则可以简单地停止源。鉴于没有其他程序可以绑定到端口,那么您知道已经有另一个源任务消耗此端口的数据。