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