我已经实现的源代码,其中打开固定的udp端口和监听它。因此,我希望每个任务管理器只运行一个源(在我的示例中,每个节点运行一个任务管理器),因为 java.net.BindException: Address already in use
将引发异常。
我在测试apache flink的ha时注意到了这个问题。当我关闭一个任务管理器时,apacheflick开始尝试在一个节点上运行具有相同端口的两个源。
那么,如何为每个任务管理器(或每个集群节点)运行一个源呢?
我已经实现的源代码,其中打开固定的udp端口和监听它。因此,我希望每个任务管理器只运行一个源(在我的示例中,每个节点运行一个任务管理器),因为 java.net.BindException: Address already in use
将引发异常。
我在测试apache flink的ha时注意到了这个问题。当我关闭一个任务管理器时,apacheflick开始尝试在一个节点上运行具有相同端口的两个源。
那么,如何为每个任务管理器(或每个集群节点)运行一个源呢?
1条答案
按热度按时间fd3cxomn1#
目前不可能动态地强制每个服务器上只运行一个任务
TaskManager
. 通过将插槽数设置为,可以避免将多个源任务调度到同一台计算机1
. 但是,如果你丢了一台机器,又没有备用的TaskManager
,则没有足够的插槽重新启动作业。或者,您可以编写源代码,使其更具弹性。例如,如果源无法绑定到指定的端口,您可以简单地停止它们。假设没有其他程序可以绑定到该端口,那么您就知道已经有另一个源任务在使用来自该端口的数据。