我已经实现了打开固定UDP端口并监听它的源代码。所以,我想为每个任务管理器运行一个源(在我的情况下,我为每个节点运行一个任务管理器),因为会抛出java.net.BindException: Address already in use
异常。
我在Apache Flink的测试HA时发现了这个问题。当我关闭一个任务管理器时,Apache Flick开始尝试在一个节点上运行两个具有相同端口的源。
那么,如何为每个任务管理器(或每个群集节点)运行一个源?
答案 0 :(得分:1)
目前无法动态强制执行每种TaskManager
上只有一种任务运行。通过将插槽数设置为1
,可以避免将多个源任务调度到同一台计算机。但是,如果您丢失了一台机器并且没有备用TaskManager
,那么您将无法获得足够的插槽来重新启动该作业。
或者,您可以编写源代码,使其更具弹性。例如,如果源无法绑定到指定端口,则可以简单地停止源。鉴于没有其他程序可以绑定到端口,那么您知道已经有另一个源任务消耗此端口的数据。