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